3d coplanar points to 2d coordinates

Started by
0 comments, last by Zakwayda 18 years, 2 months ago
Hello everyone, I have a set of points which lie on the same plane along with the normal of the plane. The points are from cutting a 3d model along the plane. The problem is I need to draw the points in a 2d graph (X,Y) so I need a way to remove a 3rd coordinate from the 3d points. right now I just have a switch to check if the normal of the plane is a specific axis (X,Y,Z) but I just found out that arbitrary cutting planes are possible. I am thinking that I need to rotate, translate the 3d points by a matrix to map them into the XY (UV) axis but I am not sure how to get the matrix from only the normal of the plane. From my limited understanding don't you need at least 1 more vector aside from the plane normal to define the U or V direction since you can rotate the plane around the normal? Any help is much appreciated. Thanks.
---------------Magic is real, unless declared integer.- the collected sayings of Wiz Zumwalt
Advertisement
Quote:Original post by yapposai
Hello everyone,

I have a set of points which lie on the same plane along with the normal of the plane. The points are from cutting a 3d model along the plane.

The problem is I need to draw the points in a 2d graph (X,Y) so I need a way
to remove a 3rd coordinate from the 3d points.

right now I just have a switch to check if the normal of the plane is a specific axis (X,Y,Z) but I just found out that arbitrary cutting planes are possible.

I am thinking that I need to rotate, translate the 3d points by a matrix to map them into the XY (UV) axis but I am not sure how to get the matrix from only the normal of the plane. From my limited understanding don't you need at least 1 more vector aside from the plane normal to define the U or V direction since you can rotate the plane around the normal?
Yeah, you got it. You can't uniquely define a basis from a single vector (the normal), so you'll have to construct an arbitrary basis. A typical way to do this is to:

1. Make the normal the z axis of the basis
2. Cross z with the cardinal axis with which it is least aligned (in the order cross(worldAxis,z))
3. Normalize the result to get the x axis
4. Cross z with x to get the y axis

You'll then need to choose an origin for the coordinate system - perhaps the average of the input points? Then you can transform the points into this coordinate system and discard the z components (they won't necessarily be non-zero due to numerical error, but they'll be close enough). If at that point the points aren't oriented the way you want, you could apply a rotation.

Then they should be ready for display in your 2d graph.

This topic is closed to new replies.

Advertisement