2017-05-15 86 views
0

我使用svg庫raphaeljs來繪製多邊形。我這樣做:拉斐爾js--繪製無路口的路徑

path.attr({path: " 
M 301 248 613 283 588 533 370 497 232 382 232 382 Z 
"}) 

用戶在某處點擊畫布,然後根據新點的座標重新繪製多邊形。是否可以拒絕一個多邊形中的線之間的交點?
UPDATE:可以試試this爲例。我不想讓自我交叉。源代碼可以找到here

+0

你是指自交?如果您提供了[MCVE],將會有所幫助。 –

+0

@PaulLeBeau我添加了更多細節。是的,自我交叉。 – mtkachenko

回答

0

我只是想知道Raphael是否有一些嵌入功能來查找線段之間的交集。最後我使用了基於矢量乘法的這種方法:

function intersection(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2){ 
    var v1 = (bx2-bx1)*(ay1-by1)-(by2-by1)*(ax1-bx1); 
    var v2 = (bx2-bx1)*(ay2-by1)-(by2-by1)*(ax2-bx1); 
    var v3 = (ax2-ax1)*(by1-ay1)-(ay2-ay1)*(bx1-ax1); 
    var v4 = (ax2-ax1)*(by2-ay1)-(ay2-ay1)*(bx2-ax1); 
    return (v1*v2<0) && (v3*v4<0); 
} 
1

要避免自相交多邊形,當然,您所要做的就是檢查您要添加的線段是否不跨越多邊形中的任何其他線段。

所以它只是添加一條線相交測試和檢查最新的段與所有以前的段。

您可以在網上搜索線路交叉點測試的算法。你不會有麻煩找到它。