簡體   English   中英

查找描述曲線的點集之間的交點

[英]Finding intersection between sets of points describing a curve

說我有兩點

p1, p2, p3,... ,pn 

q1, q2, q3,..., qn

描述了平面中的兩條路徑(曲線)。 這些點可能不是從曲線上均勻采樣的,而是“按順序”(關於曲線的參數化)。 找出這兩條曲線相交的好方法是什么?

例如,我可能每個人只有兩點

(0,0) (1,0)

(-5,1) (-4,-1)

在這種情況下,它們的交點為(-4.5,0)。

最簡單的方法是在每兩個點之間繪制一條邊,將它們延伸,然后查看是否有兩對邊在合適的土地上相交。 我很好奇是否有更好的方法。

您可以預處理每條折線 (段鏈),並為每條折線找到一個最小的邊界矩形。 同樣,您可以為每條折線建立一個分層的數據結構-整個折線的矩形,然后是每個折線的矩形等等。 您可以使用其他幾何形式代替矩形-例如,圓形或橢圓形。

然后,您可以使用“ 裁剪和剔除”來加速相交搜索。

您可以圍繞一組點計算邊界框,例如每100對點,僅以anxn方式相交。 邊界框相交可以非常有效地完成。 如果兩個邊界框(每條曲線中的一個邊界)相交,則可以僅測試這些框內所涉及的邊緣是否相交。

當曲線之間有多個交點時,這將處理這種情況。 只需注意邊界情況,當相交點實際上是定義邊的頂點之一時。

找到這種相交的最有效方法是借助掃掠線算法,通過詳盡的比較,該算法可以實現O(n log n + k)個運行時間(n個具有k個相交的線段),優於O(n²)。 參見http://www.ti.inf.ethz.ch/ew/lehre/CG09/materials/v9.pdf 不幸的是,這樣的解決方案相當復雜。

一個可能更容易實現的替代方法是使用層次化邊界:取每個段的邊界框,將框兩兩合並(連續段),然后四乘四,依此類推。 從N個分段開始,您將形成N-1個邊界框的層次結構。

然后,要與兩條曲線相交,請檢查其頂層邊界框的干涉。 如果確實重疊,則遞歸檢查子框的干擾,依此類推。

除非您的曲線緊密纏繞在一起,否則您可以省去大量的線段比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM