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

6
我正在尝试使用Java构建从Quake 3 .map文件中渲染原始数据。.map格式将brush(形状)信息存储为一系列平面,但我想将它们转换为(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个面。

下面的图片有助于说明我的观点:定义平面的三个点

上述数据中我提供的是每行的p1、p2和p3点。

Quake 3引擎需要在编译时确定保留平面的哪些部分,但我目前对此不感兴趣。如果您需要更多信息,请随时询问!


2
请问您能否解释一下您的数据如何表示三个平面,而不是18个向量? - Tomas Aschan
1个回答

3

每当我有类似的问题时,我都会去 Wolfram Mathworld 上查找。对于这个问题,请尝试访问以下页面: 平面与平面的交点

该页面上的第8个方程式给出了三个平面的交点。要使用它,您首先需要找到平面的单位法线。这很容易:假设您已经在平面上得到了三个点abc(是吗?),则取(a-b)和(a-c)的叉积以获得法线,然后将其除以自身的大小以获得单位法线。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接