2013-07-11 127 views
0

我找到了一個不錯的算法來檢查三/三路口,但我想它,如果他們只是在沿着邊緣或邊緣(無重疊)某點相遇失敗。基本上要重疊,而且觸摸不夠。三角三角重疊(但不是邊緣)

任何人都知道如何調整它?

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

ex。應該失敗

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

請注意,「觸摸邊緣」的數字穩定性較差。 –

回答

1

一個簡潔的解決方案和臨時解決方案讓人想起:)。特設的只是增加了額外的測試來識別邊緣重疊。整齊的一個直接計算的重疊面積和說,三角形相交如果面積> 0


更合適的區域 - 的重疊的方法:薩瑟蘭-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)。如果兩個點都只在其中一個點上,那麼它們只會重疊一個邊。