如何找到三个平面的交叉点?

时间:2009-09-06 19:37:46

标签: java graphics geometry

我正在尝试使用Java从Quake 3 .map文件构建渲染原始数据。 .map格式将画笔(形状)信息存储为一系列平面,但我想将它们转换为格式(x,y,z)的点。所涉及的数学在这一点上有点超出我的意见,所以有人对我如何做到这一点有任何建议吗?如果需要,我可以使用外部库,但如果可能的话,我宁愿使用我自己的代码。

要播放的一些数据:

Dimensions:   64*64*64
Position:     All sides are equidistant from the origin (0,0,0)
Shape:     Cube
( 64 64 64 ) ( 64 -64 64 ) ( -64 64 64 )
( 64 64 64 ) ( -64 64 64 ) ( 64 64 -64 )
( 64 64 64 ) ( 64 64 -64 ) ( 64 -64 64 )
( -64 -64 -64 ) ( 64 -64 -64 ) ( -64 64 -64 )
( -64 -64 -64 ) ( -64 -64 64 ) ( 64 -64 -64 )
( -64 -64 -64 ) ( -64 64 -64 ) ( -64 -64 64 )

编辑:

此数据显示的是一个有6个边的立方体。这六个边中的每一个都可以存储为一个平面,三个坐标用于显示位置和方向。上述数据的每一行显示一个平面,所有6行构成一个立方体的6个平面。

此图片有助于说明我的观点:Three Points Defining a Plane

点p1,p2和p3是我在每行中给出的,在上面的数据中。

Quake 3引擎必须在编译时整理出飞机的哪些部分,但我现在对此并不感兴趣。如果您想了解更多信息,请随时提出!

1 个答案:

答案 0 :(得分:3)

每当我遇到这样的问题时,我都会去Wolfram Mathworld。对于此问题,请尝试以下页面: Plane-Plane Intersection

该页面上的公式8给出了三个平面的交集。要使用它,首先需要找到飞机的单位法线。这很容易:在飞机上给出三点 a b c (这就是你所拥有的,对吗?), ( a - b )和( a - c )的交叉乘积得到正常,然后除它可以通过它自己的大小来获得正常的单位。