toon-members
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Toon-members] TooN helpers.h generated.h


From: Ethan Eade
Subject: [Toon-members] TooN helpers.h generated.h
Date: Mon, 05 Jun 2006 17:54:37 +0000

CVSROOT:        /cvsroot/toon
Module name:    TooN
Changes by:     Ethan Eade <ethaneade>  06/06/05 17:54:37

Modified files:
        .              : helpers.h generated.h 

Log message:
        Added transformCovariance to helpers.h and generated variants to 
generated.h.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/TooN/helpers.h?cvsroot=toon&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/TooN/generated.h?cvsroot=toon&r1=1.1&r2=1.2

Patches:
Index: helpers.h
===================================================================
RCS file: /cvsroot/toon/TooN/helpers.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- helpers.h   24 May 2006 17:04:33 -0000      1.11
+++ helpers.h   5 Jun 2006 17:54:36 -0000       1.12
@@ -239,6 +239,31 @@
   }
 }
 
+template <int R, int N, class Accessor1, class Accessor2> Matrix<R,R> 
transformCovariance(const FixedMatrix<R,N,Accessor1>& A, const 
FixedMatrix<N,N,Accessor2>& B)
+{
+    Matrix<R> M;
+    for (int i=0; i<R; i++) {
+       double sum = 0;
+       for (int k=0; k<N; k++) {
+           double psum = 0;
+           for (int l=k+1; l<N;l++)
+               psum += A[i][l] * B[k][l];
+           sum += (psum * 2 + A[i][k]*B[k][k]) * A[i][k];
+       }
+       M[i][i] = sum;
+       for (int j=i+1; j<R;j++) {
+           double sum = 0;
+           for (int k=0; k<N; k++) {
+               sum += A[i][k]*A[j][k]*B[k][k];
+               for (int l=k+1; l<N;l++)
+                   sum += (A[i][l]*A[j][k] + A[i][k]*A[j][l]) * B[k][l];
+           }
+           M[i][j] = M[j][i] = sum;
+       }
+    }
+    return M;
+}
+
 #ifndef TOON_NO_NAMESPACE
 }
 #endif 

Index: generated.h
===================================================================
RCS file: /cvsroot/toon/TooN/generated.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- generated.h 24 May 2006 17:04:33 -0000      1.1
+++ generated.h 5 Jun 2006 17:54:36 -0000       1.2
@@ -112,3 +112,143 @@
        }
        return rank;
 }
+
+// Generated for J*C*J^T, C symmetric
+template <class Accessor1, class Accessor2> Matrix<2> 
transformCovariance(const FixedMatrix<2,2,Accessor1>& A, const 
FixedMatrix<2,2,Accessor2>& B)
+{
+       Matrix<2> M;
+       M[0][0] = A[0][0]*A[0][0]*B[0][0]+ 2*A[0][0]*(A[0][1]*B[0][1])
+               + A[0][1]*A[0][1]*B[1][1];
+       M[0][1] = M[1][0] = A[0][0]*A[1][0]*B[0][0] + 
(A[0][1]*A[1][0]+A[0][0]*A[1][1])*B[0][1]
+                + A[0][1]*A[1][1]*B[1][1]
+               ;
+       M[1][1] = A[1][0]*A[1][0]*B[0][0]+ 2*A[1][0]*(A[1][1]*B[0][1])
+               + A[1][1]*A[1][1]*B[1][1];
+       return M;
+}
+// Generated for J*C*J^T, C symmetric
+template <class Accessor1, class Accessor2> Matrix<2> 
transformCovariance(const FixedMatrix<2,3,Accessor1>& A, const 
FixedMatrix<3,3,Accessor2>& B)
+{
+       Matrix<2> M;
+       M[0][0] = A[0][0]*A[0][0]*B[0][0]+ 2*A[0][0]*(A[0][1]*B[0][1] + 
A[0][2]*B[0][2])
+               + A[0][1]*A[0][1]*B[1][1]+ 2*A[0][1]*(A[0][2]*B[1][2])
+               + A[0][2]*A[0][2]*B[2][2];
+       M[0][1] = M[1][0] = A[0][0]*A[1][0]*B[0][0] + 
(A[0][1]*A[1][0]+A[0][0]*A[1][1])*B[0][1] + 
(A[0][2]*A[1][0]+A[0][0]*A[1][2])*B[0][2]
+                + A[0][1]*A[1][1]*B[1][1] + 
(A[0][2]*A[1][1]+A[0][1]*A[1][2])*B[1][2]
+                + A[0][2]*A[1][2]*B[2][2]
+               ;
+       M[1][1] = A[1][0]*A[1][0]*B[0][0]+ 2*A[1][0]*(A[1][1]*B[0][1] + 
A[1][2]*B[0][2])
+               + A[1][1]*A[1][1]*B[1][1]+ 2*A[1][1]*(A[1][2]*B[1][2])
+               + A[1][2]*A[1][2]*B[2][2];
+       return M;
+}
+// Generated for J*C*J^T, C symmetric
+template <class Accessor1, class Accessor2> Matrix<2> 
transformCovariance(const FixedMatrix<2,6,Accessor1>& A, const 
FixedMatrix<6,6,Accessor2>& B)
+{
+       Matrix<2> M;
+       M[0][0] = A[0][0]*A[0][0]*B[0][0]+ 2*A[0][0]*(A[0][1]*B[0][1] + 
A[0][2]*B[0][2] + A[0][3]*B[0][3] + A[0][4]*B[0][4] + A[0][5]*B[0][5])
+               + A[0][1]*A[0][1]*B[1][1]+ 2*A[0][1]*(A[0][2]*B[1][2] + 
A[0][3]*B[1][3] + A[0][4]*B[1][4] + A[0][5]*B[1][5])
+               + A[0][2]*A[0][2]*B[2][2]+ 2*A[0][2]*(A[0][3]*B[2][3] + 
A[0][4]*B[2][4] + A[0][5]*B[2][5])
+               + A[0][3]*A[0][3]*B[3][3]+ 2*A[0][3]*(A[0][4]*B[3][4] + 
A[0][5]*B[3][5])
+               + A[0][4]*A[0][4]*B[4][4]+ 2*A[0][4]*(A[0][5]*B[4][5])
+               + A[0][5]*A[0][5]*B[5][5];
+       M[0][1] = M[1][0] = A[0][0]*A[1][0]*B[0][0] + 
(A[0][1]*A[1][0]+A[0][0]*A[1][1])*B[0][1] + 
(A[0][2]*A[1][0]+A[0][0]*A[1][2])*B[0][2] + 
(A[0][3]*A[1][0]+A[0][0]*A[1][3])*B[0][3] + 
(A[0][4]*A[1][0]+A[0][0]*A[1][4])*B[0][4] + 
(A[0][5]*A[1][0]+A[0][0]*A[1][5])*B[0][5]
+                + A[0][1]*A[1][1]*B[1][1] + 
(A[0][2]*A[1][1]+A[0][1]*A[1][2])*B[1][2] + 
(A[0][3]*A[1][1]+A[0][1]*A[1][3])*B[1][3] + 
(A[0][4]*A[1][1]+A[0][1]*A[1][4])*B[1][4] + 
(A[0][5]*A[1][1]+A[0][1]*A[1][5])*B[1][5]
+                + A[0][2]*A[1][2]*B[2][2] + 
(A[0][3]*A[1][2]+A[0][2]*A[1][3])*B[2][3] + 
(A[0][4]*A[1][2]+A[0][2]*A[1][4])*B[2][4] + 
(A[0][5]*A[1][2]+A[0][2]*A[1][5])*B[2][5]
+                + A[0][3]*A[1][3]*B[3][3] + 
(A[0][4]*A[1][3]+A[0][3]*A[1][4])*B[3][4] + 
(A[0][5]*A[1][3]+A[0][3]*A[1][5])*B[3][5]
+                + A[0][4]*A[1][4]*B[4][4] + 
(A[0][5]*A[1][4]+A[0][4]*A[1][5])*B[4][5]
+                + A[0][5]*A[1][5]*B[5][5]
+               ;
+       M[1][1] = A[1][0]*A[1][0]*B[0][0]+ 2*A[1][0]*(A[1][1]*B[0][1] + 
A[1][2]*B[0][2] + A[1][3]*B[0][3] + A[1][4]*B[0][4] + A[1][5]*B[0][5])
+               + A[1][1]*A[1][1]*B[1][1]+ 2*A[1][1]*(A[1][2]*B[1][2] + 
A[1][3]*B[1][3] + A[1][4]*B[1][4] + A[1][5]*B[1][5])
+               + A[1][2]*A[1][2]*B[2][2]+ 2*A[1][2]*(A[1][3]*B[2][3] + 
A[1][4]*B[2][4] + A[1][5]*B[2][5])
+               + A[1][3]*A[1][3]*B[3][3]+ 2*A[1][3]*(A[1][4]*B[3][4] + 
A[1][5]*B[3][5])
+               + A[1][4]*A[1][4]*B[4][4]+ 2*A[1][4]*(A[1][5]*B[4][5])
+               + A[1][5]*A[1][5]*B[5][5];
+       return M;
+}
+// Generated for J*C*J^T, C symmetric
+template <class Accessor1, class Accessor2> Matrix<6> 
transformCovariance(const FixedMatrix<6,2,Accessor1>& A, const 
FixedMatrix<2,2,Accessor2>& B)
+{
+       Matrix<6> M;
+       M[0][0] = A[0][0]*A[0][0]*B[0][0]+ 2*A[0][0]*(A[0][1]*B[0][1])
+               + A[0][1]*A[0][1]*B[1][1];
+       M[0][1] = M[1][0] = A[0][0]*A[1][0]*B[0][0] + 
(A[0][1]*A[1][0]+A[0][0]*A[1][1])*B[0][1]
+                + A[0][1]*A[1][1]*B[1][1]
+               ;
+       M[0][2] = M[2][0] = A[0][0]*A[2][0]*B[0][0] + 
(A[0][1]*A[2][0]+A[0][0]*A[2][1])*B[0][1]
+                + A[0][1]*A[2][1]*B[1][1]
+               ;
+       M[0][3] = M[3][0] = A[0][0]*A[3][0]*B[0][0] + 
(A[0][1]*A[3][0]+A[0][0]*A[3][1])*B[0][1]
+                + A[0][1]*A[3][1]*B[1][1]
+               ;
+       M[0][4] = M[4][0] = A[0][0]*A[4][0]*B[0][0] + 
(A[0][1]*A[4][0]+A[0][0]*A[4][1])*B[0][1]
+                + A[0][1]*A[4][1]*B[1][1]
+               ;
+       M[0][5] = M[5][0] = A[0][0]*A[5][0]*B[0][0] + 
(A[0][1]*A[5][0]+A[0][0]*A[5][1])*B[0][1]
+                + A[0][1]*A[5][1]*B[1][1]
+               ;
+       M[1][1] = A[1][0]*A[1][0]*B[0][0]+ 2*A[1][0]*(A[1][1]*B[0][1])
+               + A[1][1]*A[1][1]*B[1][1];
+       M[1][2] = M[2][1] = A[1][0]*A[2][0]*B[0][0] + 
(A[1][1]*A[2][0]+A[1][0]*A[2][1])*B[0][1]
+                + A[1][1]*A[2][1]*B[1][1]
+               ;
+       M[1][3] = M[3][1] = A[1][0]*A[3][0]*B[0][0] + 
(A[1][1]*A[3][0]+A[1][0]*A[3][1])*B[0][1]
+                + A[1][1]*A[3][1]*B[1][1]
+               ;
+       M[1][4] = M[4][1] = A[1][0]*A[4][0]*B[0][0] + 
(A[1][1]*A[4][0]+A[1][0]*A[4][1])*B[0][1]
+                + A[1][1]*A[4][1]*B[1][1]
+               ;
+       M[1][5] = M[5][1] = A[1][0]*A[5][0]*B[0][0] + 
(A[1][1]*A[5][0]+A[1][0]*A[5][1])*B[0][1]
+                + A[1][1]*A[5][1]*B[1][1]
+               ;
+       M[2][2] = A[2][0]*A[2][0]*B[0][0]+ 2*A[2][0]*(A[2][1]*B[0][1])
+               + A[2][1]*A[2][1]*B[1][1];
+       M[2][3] = M[3][2] = A[2][0]*A[3][0]*B[0][0] + 
(A[2][1]*A[3][0]+A[2][0]*A[3][1])*B[0][1]
+                + A[2][1]*A[3][1]*B[1][1]
+               ;
+       M[2][4] = M[4][2] = A[2][0]*A[4][0]*B[0][0] + 
(A[2][1]*A[4][0]+A[2][0]*A[4][1])*B[0][1]
+                + A[2][1]*A[4][1]*B[1][1]
+               ;
+       M[2][5] = M[5][2] = A[2][0]*A[5][0]*B[0][0] + 
(A[2][1]*A[5][0]+A[2][0]*A[5][1])*B[0][1]
+                + A[2][1]*A[5][1]*B[1][1]
+               ;
+       M[3][3] = A[3][0]*A[3][0]*B[0][0]+ 2*A[3][0]*(A[3][1]*B[0][1])
+               + A[3][1]*A[3][1]*B[1][1];
+       M[3][4] = M[4][3] = A[3][0]*A[4][0]*B[0][0] + 
(A[3][1]*A[4][0]+A[3][0]*A[4][1])*B[0][1]
+                + A[3][1]*A[4][1]*B[1][1]
+               ;
+       M[3][5] = M[5][3] = A[3][0]*A[5][0]*B[0][0] + 
(A[3][1]*A[5][0]+A[3][0]*A[5][1])*B[0][1]
+                + A[3][1]*A[5][1]*B[1][1]
+               ;
+       M[4][4] = A[4][0]*A[4][0]*B[0][0]+ 2*A[4][0]*(A[4][1]*B[0][1])
+               + A[4][1]*A[4][1]*B[1][1];
+       M[4][5] = M[5][4] = A[4][0]*A[5][0]*B[0][0] + 
(A[4][1]*A[5][0]+A[4][0]*A[5][1])*B[0][1]
+                + A[4][1]*A[5][1]*B[1][1]
+               ;
+       M[5][5] = A[5][0]*A[5][0]*B[0][0]+ 2*A[5][0]*(A[5][1]*B[0][1])
+               + A[5][1]*A[5][1]*B[1][1];
+       return M;
+}
+
+// Generated for J*C*J^T, C symmetric
+template <class Accessor1, class Accessor2> Matrix<3> 
transformCovariance(const FixedMatrix<3,2,Accessor1>& A, const 
FixedMatrix<2,2,Accessor2>& B)
+{
+       Matrix<3> M;
+       M[0][0] = A[0][0]*A[0][0]*B[0][0]+ 2*A[0][0]*(A[0][1]*B[0][1])
+               + A[0][1]*A[0][1]*B[1][1];
+       M[0][1] = M[1][0] = A[0][0]*A[1][0]*B[0][0] + 
(A[0][1]*A[1][0]+A[0][0]*A[1][1])*B[0][1]
+                + A[0][1]*A[1][1]*B[1][1]
+               ;
+       M[0][2] = M[2][0] = A[0][0]*A[2][0]*B[0][0] + 
(A[0][1]*A[2][0]+A[0][0]*A[2][1])*B[0][1]
+                + A[0][1]*A[2][1]*B[1][1]
+               ;
+       M[1][1] = A[1][0]*A[1][0]*B[0][0]+ 2*A[1][0]*(A[1][1]*B[0][1])
+               + A[1][1]*A[1][1]*B[1][1];
+       M[1][2] = M[2][1] = A[1][0]*A[2][0]*B[0][0] + 
(A[1][1]*A[2][0]+A[1][0]*A[2][1])*B[0][1]
+                + A[1][1]*A[2][1]*B[1][1]
+               ;
+       M[2][2] = A[2][0]*A[2][0]*B[0][0]+ 2*A[2][0]*(A[2][1]*B[0][1])
+               + A[2][1]*A[2][1]*B[1][1];
+       return M;
+}




reply via email to

[Prev in Thread] Current Thread [Next in Thread]