Varkon MBS Programmers manual
Low level routine to create a 4x4 matrix by using a statistical method called Principal Component Analysis(PCA) and specifying a set of points (point cloud) stored in a one dimension array. The result is a 4x4 matrix, which might be used to create a coordinate system or transformation matrix.
For more details see "Mathematics for 3D Game Programming and Computer Graphics" Authored by Eric Lengyel - second edition, pages 217--221.
status:=pca(npts,pts,tmat);
INT | status; |
INT | npts; |
VECTOR | pts(npts); | FLOAT | tmat(4,4); |
npts | - Number of points |
pts | - Array of points | tmat | - 4x4 transformation matrix |
None.
0 | => | Operation is successful. |
-1 | => | No. of input points is less than 4. |
-2 | => | The input points are identical. |
-3 | => | The input points are are on straight line. |
The created 4x4 matrix will be like the following matrix:
Xx | Xy | Xz | Ox |
Yx | Yy | Yz | Oy |
Zx | Zy | Zz | OZ |
0 | 0 | 0 | 1 |
Since:
Xx, Yx, Zx | => | The unit length eigenvector components correspond to the largest eigenvalue. |
Xy, Yy, Zy | => | The unit length eigenvector components correspond to the second largest eigen value. |
Xz, Yz, Zz | => | The unit length eigenvector components correspond to the smallest eigen value. |
Ox, Oy, Oz | => | The mean of the set of points represents the translation transformation. |
The three eigen vectors are orthogonal to each other.
Be aware that in the last two cases of the return value when (status = -2 or -3), the created 4x4 transformation matrix not represents some characetristics of the given data like the planarity property. In other words in case of calculate a point on the fitted plane to the given data and its normal vector, the return value of the function should be equal to 0 (status= 0).
To visualize or use the 4x4 matrix that represents the coordinate system, use csys_usrdef(), in this case the fitted plane to the given data is XY - plane and the normal vector is the Z axis of the created coordinate system, see below.
csys_usrdef() and tform_usrdef
Varkon 1.19D svn # 120M