gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:31:26 25 4
gpt4 key购买 nike

我找到了一个很好的算法来检查三重交点,但如果它们仅在沿边缘或边缘的某个点相遇(无重叠),我希望它失败。基本上想要重叠,触摸是不够的。

有人知道怎么调整吗?

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);

最佳答案

我想到了一个简洁的解决方案和一个临时解决方案 :)。临时测试只是添加了额外的测试来识别仅边缘重叠。整洁的直接计算重叠的面积并说三角形相交如果面积> 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)。如果两个点仅在其中一个点中,则它们仅重叠一条边。

关于c++ - 三角形三角形重叠(但不是边缘),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17604965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com