在我的程序中,我在顶视图中有一个实体,我使用切割平面切割(通过在顶视图上绘制一条线 - 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飞机。那么这里,方向向量是切割线的方向还是矩形的每个边缘?我希望我不要混淆任何人。
答案 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 /