如果我得到一段足夠長的線段可以穿過給定的多邊形,這可能是凹面或凸多邊形。我如何找到包含在多邊形中的所有相交的光段?線裁剪爲任意二維多邊形
如果目標區域不是多邊形,但隱含的曲線函數或樣條曲線,怎麼辦呢?
謝謝!
如果我得到一段足夠長的線段可以穿過給定的多邊形,這可能是凹面或凸多邊形。我如何找到包含在多邊形中的所有相交的光段?線裁剪爲任意二維多邊形
如果目標區域不是多邊形,但隱含的曲線函數或樣條曲線,怎麼辦呢?
謝謝!
真的沒有一個簡單的解決方案來解決您的問題,特別是曲線(貝塞爾曲線和樣條曲線)。除了多邊形裁剪的複雜性之外,重構修剪曲線還有相當大的挑戰(假設您希望裁剪結果保持爲貝塞爾曲線和樣條曲線,而不僅僅是「平展」線條近似)。
我最近發佈了一個測試更新*到我的多邊形剪裁庫'Clipper',它可以做線多邊形和線條剪裁(線條也可以是曲線)。然而,雖然主要的庫是用Delphi編寫的,但是C#& C#,新的beta代碼到目前爲止只在Delphi中可能不會幫助你。不過,如果你看看代碼,你會明白爲什麼我說沒有'簡單'的解決方案。
如果區域不是多邊形,但是由某個隱式函數給出,則需要找到該函數等於紅線的位置(當然,方法取決於函數)。
謝謝。你使用哪種方法來剪輯曲線? – Buzz 2010-10-28 03:38:33
我採取的方法最初是爲了平整曲線(並標記每個展平段),因爲限幅算法僅適用於線條。一旦找到交點,標記的段將用於識別曲線子段(de Casteljau算法)。然後,將de Casteljau的算法重新應用於原始曲線,但僅限於包含交叉點的曲線部分。那有意義嗎? – 2010-10-28 16:48:10
是的。合理。謝謝! – Buzz 2010-11-08 04:47:40