【问题标题】:How to get the vertices of a polygon described by planes如何获得由平面描述的多边形的顶点
【发布时间】:2010-09-23 13:47:46
【问题描述】:

这是一个没有回答的问题的转贴

基本上我正在尝试对具有以下格式的地图进行建模:

每个画笔都定义了一个实体区域。画笔将此区域定义为四个或更多平面的交集。每个平面由三个非共线点定义。这些点必须顺时针方向:

1--2-----------------> | 3 | | | | | ,

每个画笔语句如下所示:

{ (128 0 0) (128 1 0) (128 0 1) //平面 1 ( 256 0 0 ) ( 256 0 1 ) ( 256 1 0 ) //平面 2 ( 0 128 0 ) ( 0 128 1 ) ( 1 128 0 ) //平面 3 ( 0 384 0 ) ( 1 384 0 ) ( 0 384 1 ) //平面 4 (0 0 64) (1 0 64) (0 1 64) //平面 5 (0 0 128) (0 1 128) (1 0 128)//平面 6 }

当您第一次看到它时,这可能有点令人困惑。它定义了一个从 (128,128,64) 延伸到 (256,384,128) 的矩形区域。以下是单行的含义:

(128 0 0) (128 1 0) (128 0 1) 第 1 点 第 2 点 第 3 点

我需要找到平面的交点,因此我只能使用可以在 3d 空间中绘制 2d 面板的方法来绘制形状。 例如,以下代码将在空间中绘制一个三角形:

开始形状(); 顶点(x0,y0,z0); 顶点(x1,y1,z1); 顶点(x2,y2,z2); 顶点(x0,y0,z0); 结束形状();

有没有比遍历所有可能的平面相交更好的方法来计算顶点?

【问题讨论】:

  • 一些术语:“实体区域”=“体积”,“四个或更多平面的交点”=“由四个或更多平面限制的体积”(两个平面的交点是一条线或什么都没有)。 .."rectangular region" = "rectangular prism"...不是学究气,但这个问题已经够难了;)
  • 优雅地接受迂腐

标签: c++ graphics 3d


【解决方案1】:

我认为没有其他选择:关于顶点的唯一信息包含在平面中,从平面获取顶点的唯一方法是确定它们的交点,所以你必须遍历各种可能性。

开始:

如果您确定平面确实绑定了一个体积,并且没有一个平面是平行的,那么 3 个 相邻 平面的每个组合都应该产生一个顶点(只需同时求解 @987654321 @ 对于所有 3)。您可以很容易地消除体积之外的顶点(要成为形状的一部分,它们必须在所有平面上或“后面”),因此您可以测试 3 的每个组合,如果您没有这种“邻接”信息并丢弃外部点。

令我震惊的是,使用此方法您将只有 convex 体积 - 因此您可能只需在所有这些顶点上执行 3d convex hull 即可获得面的可绘制三角形。

【讨论】:

  • 是的,它们是凸的。任何非凸体积都被分成凸体积。哎呀...我猜我会破解的。
猜你喜欢
  • 2017-07-19
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 2011-01-05
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
相关资源
最近更新 更多