【问题标题】:How can I find the intersecting point of three planes?如何找到三个平面的交点?
【发布时间】:2009-09-07 04:30:14
【问题描述】:

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

【问题讨论】:

  • 您能否解释一下您的数据如何表示三个平面,而不是 18 个向量?
  • 当然。我已经编辑了我的问题。

标签: java graphics geometry


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多