首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >三角形算法的三维交点-显示最上面的平面

三角形算法的三维交点-显示最上面的平面
EN

Stack Overflow用户
提问于 2011-07-30 01:33:34
回答 4查看 1K关注 0票数 9

我正试图计算出最上面最相交的任意几个平面,没有joy!我正在使用actionscript,但只需要找到一个我可以实现的算法。

问题:

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

这是一张用两个三角形来阐明我的意思的图片:

然而,当我们允许两个以上的三角形,我得到尴尬的线交叉。

EN

回答 4

Stack Overflow用户

发布于 2011-07-30 14:01:44

我对你的问题很感兴趣,所以我描述了算法并在C++中实现了它(我不知道它有C++那么好)。该算法的主要思想是在增加新三角形的同时,对上表面进行迭代重新计算。

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

让我们把上面的表面看作一个多边形集。当新多边形正在添加时,我们应该迭代地重新计算所有表面多边形的面。人脸重新计算算法包括以下步骤:

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

不是为了淹没在这个页面上,而是将代码放入巴斯丁中。

票数 1
EN

Stack Overflow用户

发布于 2011-10-01 20:21:58

您正在三个垂直“轴”之间构造感兴趣的表面。地面下面有一个基座。把它绑在上面,使问题包含在一个三角棱镜中。

在你的表面上的体积是一个http://en.wikipedia.org/wiki/Convex_hull形成的交叉平面(即:帽,三边,和三角形的交叉口)。关于凸壳有很多理论和规范。

我不知道ActionScript,但是在“凸壳相交平面”上进行快速的互联网搜索,让我找到了这个代码,它(意图)解决了您的问题:

http://nauful.com/pages/convexhull.html

希望这能帮上忙,格伦

票数 1
EN

Stack Overflow用户

发布于 2011-07-30 15:25:47

也许效率不高,但这里有个主意。

计算每两个独立三角形之间的相交线。

然后将三角形边添加到这个集合中,并计算其中每两条线之间的交点。

找出这些点中哪些是从顶部看不见的,并将它们从集合中移除。这可以使用光线投射和寻找交叉,但可能有更有效的方法。

最后得到一组点,这些点是最上面网格的顶点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6880521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档