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

标签 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 引擎必须在编译时整理出飞机的哪些部分要保留,但目前我对此不感兴趣。如果您想了解更多信息,请随时询问!

最佳答案

每当我有这样的问题时,我都会去 Wolfram Mathworld。对于这个问题,试试这个页面: Plane-Plane Intersection

该页上的公式 8 给出了三个平面的交集。要使用它,您首先需要找到平面的单位法线。这很简单:给定平面上的三个点 abc(这就是你得到的,对吧?),取(a-b) 和 (a-c) 的叉积得到一个法线,然后除它通过它自己的大小来获得一个单位正常。

关于java - 如何找到三个平面的交点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1386509/

相关文章:

geometry - 单位球体上的最近邻,点分布大致均匀

java - 如何从集合中获取元素?

java - 无法在 JPanel 上绘图

c# - 如果形状的高度大于表单的高度,则显示滚动条

opencv - 让撕破的纸恢复原样

c++ - 如何从一组线段创建封闭区域(凸多边形)?

math - 如何找到有向距离的符号?

java - Eclipse 找不到文件?

java - getRequestProperty ("Authorization") 总是返回 null

java - 如何在 Java 中比较字符串?