将3D平面(实体的前视图)转换为2D坐标(XY平面)

时间:2014-06-02 07:21:50

标签: vb.net 3d 2d

在我的程序中,我在顶视图中有一个实体,我使用切割平面切割(通过在顶视图上绘制一条线 - XY平面)。使用此线切割实体后,我必须在XY平面上显示切割部分的正面,这样我就可以在纸上打印横截面图。所以,一旦我有一个切割面的矩形(在前视图 - XZ平面),我必须将其转换为在XY平面中显示。我怎么能用VB.net做到这一点。

我在这里看到了这个问题:convert 3D plane to 2D 和代码由用户Kieth提供。 这个解决方案与我的问题有关吗?

编辑:此编辑与Nico Schertler的回答有关。我读了矢量和基本坐标几何。我该如何获得方向矢量?例如,剪切我的立方体的切割线由以下定义:stPt(-1500,24038,0)和edPt(45500,24038,0)。固体的切割面是矩形:pt1(-350,24038,0),pt2(1335,24038,0),pt3(1335,24038,-350)和pt4(-350,24038,-350)。 我必须变换这个矩形的每个坐标,使它位于XY平面内。目前它是XZ飞机。那么这里,方向向量是切割线的方向还是矩形的每个边缘?我希望我不要混淆任何人。

1 个答案:

答案 0 :(得分:1)

您基本上想要将3D点转换为局部2D坐标系。我们需要几件事情:

本地原点的坐标。这可能是切割形状的质心或点平均值。无论如何,它应该与切割形状位于同一平面。

本地向上矢量的方向。这只是(0, 0, 1),因为你没有改变这个方向。

本地右向量的方向。这是由切割线的方向给出的。它的格式为(rx, ry, 0)。该矢量应该被标准化。

然后我们可以按如下方式计算3D点(u, v)的本地坐标p

d = p - origin;
u = dot(d, rightVector);
v = dot(d, upVector); //this is simply d.z because upVector=(0,0,1)

您可以使用本地坐标(u, v)来显示切割形状。这也可以用矩阵表示:

/ u \   / rightVector.x  rightVector.y  rightVector.z \   / d.x \
\ v / = \ upVector.x     upVector.y     upVector.z    / * | d.y |
                                                          \ d.z /