这是一个未经答复的问题的转贴
基本上我正在尝试为具有以下格式的地图建模:
每个画笔定义一个实心区域。画笔将此区域定义为四个或更多平面的交点。每个平面由三个非共线点定义。这些点必须顺时针方向:
1--2-----------------> | 3 | | | | | ,
每个画笔语句如下所示:
{ ( 128 0 0 ) ( 128 1 0 ) ( 128 0 1 ) //plane 1 ( 256 0 0 ) ( 256 0 1 ) ( 256 1 0 ) //plane 2 ( 0 128 0 ) ( 0 128 1 ) ( 1 128 0 ) //plane 3 ( 0 384 0 ) ( 1 384 0 ) ( 0 384 1 ) //plane 4 ( 0 0 64 ) ( 1 0 64 ) ( 0 1 64 ) //plane 5 ( 0 0 128 ) ( 0 1 128 ) ( 1 0 128 )//plane 6 }
当你第一次看到它时,这可能只是有点混乱。它定义了一个从(128,128,64)延伸到(256,384,128)的矩形区域。以下是单行的含义:
( 128 0 0 ) ( 128 1 0 ) ( 128 0 1 ) 1st Point 2nd Point 3rd Point
我需要找到平面的交点,这样我才能使用可以在3d空间中绘制2d面板的方法绘制形状。 以下代码将在空间中绘制一个三角形,例如:
beginShape(); vertex(x0,y0,z0); vertex(x1,y1,z1); vertex(x2,y2,z2); vertex(x0,y0,z0); endShape();
有没有更好的方法来计算顶点而不是遍历所有平面相互作用的可能性?
答案 0 :(得分:4)
我认为没有其他选择:关于顶点的唯一信息包含在平面中,从平面获取顶点的唯一方法是确定它们的交点,所以你必须循环可能性。
开始:
如果你确定这些平面确实绑定了一个体积,并且没有一个平面是平行的,那么3个 adjoscent 平面的每个组合应该产生一个顶点(只需同时求解{{ 3}}所有3)。你可以很容易地消除体积外的顶点(成为形状的一部分,它们必须在所有平面上或“后面”)所以你可以只测试3的每个组合,如果你没有这个'邻接'信息并丢弃外部点。
令我感到震惊的是,您只能使用此方法获得plane equation卷 - 因此您可以在所有这些顶点上执行3d convex以获取面的可绘制三角形。