三角形三角形重叠(但不是边缘)

Posted

技术标签:

【中文标题】三角形三角形重叠(但不是边缘)【英文标题】:Triangle Triangle Overlap (But not edges) 【发布时间】:2013-07-11 23:02:08 【问题描述】:

我找到了一个很好的算法来检查 tri/tri 交叉点,但如果它们只在边缘或边缘的某个点相遇(没有重叠),我希望它会失败。基本上是想重叠,而且触摸是不够的。

有人知道怎么调整吗?

http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/code/opttritri.txt

例如。应该失败

float a1[3] =  0, 0, 0 ; 
float a2[3] =  2, 0, 0 ; 
float a3[3] =  0, 1, 0 ; 
float b1[3] =  0, 0, 0 ; 
float b2[3] =  2, 0, 0 ; 
float b3[3] =  0, -1, 0 ; 

bool inters = NoDivTriTriIsect(a1, a2, a3, b1, b2, b3);

【问题讨论】:

请注意“触摸边缘”的数值稳定性较差。 【参考方案1】:

我想到了一个简洁的解决方案和一个临时的解决方案 :)。临时的只是添加了额外的测试来识别边缘重叠。整洁的直接计算重叠的面积,并说如果 area>0

三角形相交

更简洁的重叠区域方法:Sutherland-Hodgman 算法生成三角形-三角形重叠的多边形。然后只计算多边形面积 (How do I calculate the area of a 2d polygon?) (https://math.stackexchange.com/questions/154628/find-the-area-of-overlap-of-two-triangles)


如果您更喜欢通过过滤案例的临时解决方案:首先通过将边缘参数化为线条来查找重叠边界,然后查找具有相同参数的线条。然后检查最短边起点上方和下方的点是否在两个三角形中。 (http://www.blackpawn.com/texts/pointinpoly/default.html)。如果两个点都在其中一个中,则它们仅重叠一条边。

【讨论】:

以上是关于三角形三角形重叠(但不是边缘)的主要内容,如果未能解决你的问题,请参考以下文章

是否有可能在三个js中勾勒出three.js形状的边缘?

OpenGL中的像素间隙来自哪里?

光能传递全局照明阴影的边缘抖动,不直

k路三角形集交点和三角剖分

重叠圆的组合面积

[算法]三角形与立方体重叠测试