9 #include <aliceVision/mvsData/Point3d.hpp>
26 double A[3][3], V[3][3], d[3], X[4], vx[3], vy[3], vz[3];
32 xxsum += (double)p->x * (
double)p->x;
33 yysum += (double)p->y * (
double)p->y;
34 zzsum += (double)p->z * (
double)p->z;
35 xysum += (double)p->x * (
double)p->y;
36 xzsum += (double)p->x * (
double)p->z;
37 yzsum += (double)p->y * (
double)p->z;
60 float xmean = xsum / (double)count;
61 float ymean = ysum / (double)count;
62 float zmean = zsum / (double)count;
64 A[0][0] = (xxsum - xsum * xmean - xsum * xmean + xmean * xmean * (double)count) / (double)(count);
65 A[0][1] = (xysum - ysum * xmean - xsum * ymean + xmean * ymean * (double)count) / (double)(count);
66 A[0][2] = (xzsum - zsum * xmean - xsum * zmean + xmean * zmean * (double)count) / (double)(count);
67 A[1][0] = (xysum - xsum * ymean - ysum * xmean + ymean * xmean * (double)count) / (double)(count);
68 A[1][1] = (yysum - ysum * ymean - ysum * ymean + ymean * ymean * (double)count) / (double)(count);
69 A[1][2] = (yzsum - zsum * ymean - ysum * zmean + ymean * zmean * (double)count) / (double)(count);
70 A[2][0] = (xzsum - xsum * zmean - zsum * xmean + zmean * xmean * (double)count) / (double)(count);
71 A[2][1] = (yzsum - ysum * zmean - zsum * ymean + zmean * ymean * (double)count) / (double)(count);
72 A[2][2] = (zzsum - zsum * zmean - zsum * zmean + zmean * zmean * (double)count) / (double)(count);
87 eigen_decomposition(A, V[0], V[1], V[2], d);
89 v1 =
Point3d((
float)V[0][2], (
float)V[1][2], (
float)V[2][2]).normalize();
90 v2 =
Point3d((
float)V[0][1], (
float)V[1][1], (
float)V[2][1]).normalize();
91 v3 =
Point3d((
float)V[0][0], (
float)V[1][0], (
float)V[2][0]).normalize();
93 cg.x = (float)(xsum / count);
94 cg.y = (float)(ysum / count);
95 cg.z = (float)(zsum / count);
103 static void eigen_decomposition(
double A[3][3],
double V0[],
double V1[],
double V2[],
double d[]);