【问题标题】:Convert 3D plane (front view of a solid) to 2D coordinates (XY plane)将 3D 平面(实体的前视图)转换为 2D 坐标(XY 平面)
【发布时间】:2014-06-02 07:21:50
【问题描述】:

在我的程序中,我有一个实心的顶视图,我使用切割平面切割(通过在顶视图上画一条线 - 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平面。那么这里的方向向量是切割线的方向还是矩形的每条边?我希望我不会让任何人感到困惑。

【问题讨论】:

  • 立体对象如何表示?你已经有切割的形状了吗?基思的回答似乎比您实际需要的要多得多。
  • 是的,我已经剪好了。我只想将其切片面显示为 2D。如果它已经在 XY 平面上,那很好。但情况并非总是如此。无论如何,它都可以放置在 3D 空间中。

标签: vb.net 3d 2d


【解决方案1】:

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

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

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

局部右向量的方向。这是由切割线的方向给出的。它的格式为(rx, ry, 0)。这个向量应该被归一化。

那么我们可以计算一个3D点p的局部坐标(u, v)如下:

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 /

【讨论】:

  • 谢谢。我会试试这个然后回来。我不熟悉向量和规范化,所以我需要做一些阅读。但是谢谢你给我指明了方向。
  • 我在我的代码中插入了上述逻辑,它运行良好!!谢谢尼克 Schertler。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 2014-07-11
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多