Rotate normal vector onto axis plane

前端 未结 3 1727

I have a set of data points in 3D space which apparently all fall onto a specific plane. I use PCA to compute the plane parameters. The 3rd component of PCA gives me the normal

3条回答
  •  爱一瞬间的悲伤
    2021-02-05 22:25

    If you have a plane, you have a normal vector and an origin. I wouldn't do any "rotations" at all. You're just a few vector operations away from your answer.

    • Let's call your plane's normal vector the new z axis.
    • You can generate the new y axis by crossing the old x axis with the new z axis (your plane's normal).
    • Generate the new x axis by crossing the new z with the new y.
    • Make all your new axis vectors into unit vectors (length 1).
    • For every point you have, create a vector that's from your new origin to the point (vector subtraction of point - plane_origin). Just dot with the new x and new y unit vectors and you get a pair (x,y) you can plot!

    If you have cross and dot product functions already, this is just a few lines of code. I know it works because most of the 3D videogames I wrote worked this way.

    Tricks:

    • Pay attention to which directions your vectors are pointing. If they point the wrong way, negate the resultant vector or change the order of the cross product.
    • You have trouble if your plane's normal is exactly the same as your original x axis.

提交回复
热议问题