我该如何计算n个相交平面上的顶点

时间:2010-09-16 16:22:53

标签: graphics 3d geometry

基本上我试图建模一些具有以下格式的地图画笔:

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

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

每个画笔语句如下所示:

 {
  ( 128 0 0 ) ( 128 1 0 ) ( 128 0 1 ) GROUND1_6 0 0 0 1.0 1.0
  ( 256 0 0 ) ( 256 0 1 ) ( 256 1 0 ) GROUND1_6 0 0 0 1.0 1.0
  ( 0 128 0 ) ( 0 128 1 ) ( 1 128 0 ) GROUND1_6 0 0 0 1.0 1.0
  ( 0 384 0 ) ( 1 384 0 ) ( 0 384 1 ) GROUND1_6 0 0 0 1.0 1.0
  ( 0 0 64 ) ( 1 0 64 ) ( 0 1 64 ) GROUND1_6 0 0 0 1.0 1.0
  ( 0 0 128 ) ( 0 1 128 ) ( 1 0 128 ) GROUND1_6 0 0 0 1.0 1.0
 }

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

  ( 128 0 0 ) ( 128 1 0 ) ( 128 0 1 ) GROUND1_6 0 0 0 1.0 1.0
   1st Point   2nd Point   3rd Point   Texture

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

beginShape();
vertex(x0,y0,z0);
vertex(x1,y1,z1);
vertex(x2,y2,z2);
vertex(x0,y0,z0);
endShape();

2 个答案:

答案 0 :(得分:0)

http://mathworld.wolfram.com/Plane-PlaneIntersection.html

这是你如何找到三个平面相交的地方。既然你没有在4dim工作(这是游戏,对吗?我们在3D中看到),那么这里给出的3平面解决方案就足够了。

答案 1 :(得分:0)

  

没有。我一直在寻找非平凡的   伪代码找到所有交集   有些可以在N平面上的点   平行和其他没有,但为此   飞机和它们的交叉点   创建一个2球形拓扑。

非平凡的伪代码可能是a)某人已经解决了这个问题,你只是处于代码重用模式,或者b)他们正在为你解决问题。

或者c)这是一个数学问题而不是编程问题。你有没有咨询过任何数学教授的帮助?有一个数学stackoverflow属性(我认为两个!)

我知道快速找到交点的唯一方法是将矢量导入我之前链接的公式中。这会很快给你交叉点。您已经获得了计算此信息所需的所有位数。

How to know if a line intersects a plane in C#? - Basic 2D geometry

http://www.google.com/search?q=plane+intersection+.net

相关问题