我一直在使用貝塞爾路徑繪製我需要的曲線的項目。我的項目中的每個基本形狀都包含三條首尾相連的立方貝塞爾曲線,以便斜坡與它們相遇的地方相匹配。如何確定在一個終點的立方貝塞爾路徑曲率
我需要解決的基本問題是由三條貝塞爾曲線構成的複合曲線是否與自身相交。考慮了一段時間後,我發現考慮到曲線的限制,我可以將任務簡化爲其他內容:
三條貝塞爾路徑中的每條路徑的曲率在曲率方向上應該是相對的到它所抵靠的曲線。換句話說,應該有一個拐點,一條貝塞爾曲線與另一條曲線相鄰。如果不是這種情況,我想拒絕生成曲線的參數集並選擇其他集。
在任何情況下,我的基本問題是如何檢測曲線是否存在拐點彼此相鄰的拐點。
在圖中,三條貝塞爾曲線中的每一條都使用不同的顏色顯示。左邊的黑色曲線在與紅色曲線相交處相反的方向上彎曲,但右邊的黑色曲線在相同的方向上曲線。有一個拐點在紅色和左邊黑色曲線相交處,但不在紅色和右邊黑色曲線相交處。
編輯: 下面,我添加了另一個形象,顯示出封閉貝塞爾曲線的多邊形。黑色曲線中顯示的多邊形交叉線測試的是一個拐點,而不是一個循環。我猜測一條曲線與另一條曲線相交可以通過檢查包圍多邊形是否相交來測試,如紅色和藍色曲線所示。
P.S.由於存在一些關於約束的問題,我將在此處列出其中的一些:
- 最左邊的點和最右邊的點具有相同的y值。
- 最左端控制點的x值小於最右端控制點的x值
。這使得黑色和藍色曲線不會相互交叉。 - 最左邊和最右邊的點的斜率在水平度的+/- 10 之內。
- 黑紅曲線和 紅藍曲線大約在 三分之一分滿曲線。我沒有確切的數字,但是一個樣本界限應該是 紅色曲線左端的x值介於最右邊點的x值的25% 和40%之間。
- 交點的y值是整個寬度的+/-一小部分 。
- 交叉點處的斜率大於0.6且<爲3.0(正數或 爲負數)。
我不知道,如果你的假設,再簡單的解決方法是正確的,因爲(a)它可能是他們並不儘管沒有拐點的相交;和(b)儘管存在拐點,它們可能會相交。除非你對你沒有與我們分享的三個貝塞爾細分有其他重要限制,否則我很確定你的「找到拐點」概念不起作用。在回答您的問題時,您可以查看二階導數以確定拐點(Google可以幫助您),但我認爲這對您沒有幫助。 – Rob 2013-04-22 07:52:27
也許這可能是一種方法:http://stackoverflow.com/questions/13394422/bezier-path-see-if-it-crosses – Rob 2013-04-22 08:05:05
請參閱http://pomax.github.io/bezierinfo/#curveintersection以及http://pomax.github.io/bezierinfo/#shapes,因爲你在技術上使用poly-beziers。 – 2013-04-22 12:43:18