三角形算法的三维交叉点 - 显示最顶层的平面

Ano*_*non 9 algorithm collision-detection actionscript-3 computational-geometry

我试图计算任意数量的飞机的最顶部交叉点,没有快乐!我正在使用actionscript,但只需要找到一个我可以实现的算法.

问题:

  • 考虑3垂直轴.
  • 用户为每个三角形/平面输入3个点,使得三角形的点位于其中一个轴上.
  • 用户可以输入任意数量的三角形
  • 我需要找到这些三角形的最顶层,并在屏幕上显示它以及相互作用的坐标.

这是一张图片来澄清我对2个三角形的意思:

在此输入图像描述

但是,当我们允许超过2个三角形时,我会遇到尴尬的交叉线.

eug*_*che 1

我对你的问题很感兴趣,所以我描述了该算法并用 C++ 实现了它(我不知道 AS 不如 C++)。该算法的主要思想是在添加新三角形的同时迭代重新计算顶面。

三角形被截取后,它们可以将其形状更改为具有自定义顶点数的多边形。因此,每个三角形最初都转换为普通多边形。每个多边形实例包括其平面方程和一组多边形面。作为数据结构的每个面包括多边形的一个顶点以及穿过该顶点和多边形顶点序列中的下一个顶点的垂直边界平面的方程。(因此,一组面孔的顺序很重要。)

让我们将顶面视为一个多边形集。当添加新的多边形时,我们应该迭代地重新计算所有曲面多边形的面。人脸重计算算法包括以下步骤:

  1. 找到多边形边上且位于多边形截线上的两个点。在删除其覆盖部分后,这些点应成为所考虑的多边形的新顶点。这些点中的每一个都可以计算为 3 个平面的交集:考虑的多边形平面、新的多边形平面、考虑的多边形面之一。不应该考虑不在多边形边缘上的点。
  2. 如果少于两个截取点,其中一个多边形将与另一个多边形完全重叠。因此我们应该确定上面的那个。让我们考虑当前多边形的任何点,而不是位于多边形截取线上。我们可以获取它的 x 和 y 坐标,计算新多边形平面内的点并比较它们的 z 坐标。
  3. 如果有两个点,则应修改多边形面集。点计算后我们还知道交叉面的索引。考虑索引范围内的点,可以确定要移除的面集部分。
  4. 从多边形中删除重叠的面,并将基于截取点计算的面插入到多边形中。

为了避免淹没此页面,我已将代码放入pastebin中。