2013-12-21 48 views
0

這裏是我想要做的示例圖像: enter image description here
我想從路徑2計算路徑1如何檢測和三次貝塞爾刪除不需要的點

截圖首先,從Inkscape中,在那裏我,做,創造路徑1,再加入P3原來的路徑。這根本沒有改變原來的路徑,因爲新的點實際上不需要。那麼,如何使用路徑2 SVG路徑表示並計算路徑1路徑2?如何檢測此點(p3)?

基本上,我尋找的數學公式,它可以幫助我轉換(也檢查是否有可能):
C 200,300 300,250 400,250 C 500,250 600,300 600,400

C 200,200 600,200 600,400

+0

對你的路徑數據有點困惑,因爲複合曲線中的第二條路徑指令與你所顯示的不一致;它不會以(600,400)結尾,它以(600,580) –

+0

結尾它因爲一個文檔中有兩個路徑,所以Path1在Path2之下。我只複製Path2並將其向下移動,這就是爲什麼Y座標不同。我的錯。 正確的路徑是: 'C 200,200 600,200 600,400' 和 'C 200,300 300,250 400250ç500,250 600300 600,400' – RazrFalcon

+0

請更新與正確的信息 –

回答

3

你解決一個約束問題。以你的第一個複合曲線,並用四個明確的座標,每個subcurve,我們有:

points1 = point[8]; 
points2 = point[4]; 

與以下對應:

points1[0] == points2[0]; 
points1[7] == points2[3]; 

direction(points1[0],points1[1]) == direction(points2[0], points2[1]); 
direction(points1[6],points1[7]) == direction(points2[2], points2[3]); 

我們也有對points2 [1,3相對位置的約束]和points2 [2]由於中心點的在複合曲線的切線:

direction(points1[2],points[4]) == direction(points2[1],points2[2]); 

,最後,我們對通用約束,其中導通和截止曲線POIN如果我們希望曲線通過一個點,那麼ts可以是三次曲線,其描述如下:http://pomax.github.io/bezierinfo/#moulding

從該部分取「abc」比率,我們可以檢查您的複合曲線參數是否符合三次曲線:如果我們構建具有點

A = points1[0]; 
B = points1[3]; 
C = points1[7]; 

與乙在t = 0.5(在此情況下)的新三次曲線,那麼我們就可以驗證所得到的曲線是否符合必須保持這是一個合法的簡化的約束條件。

這裏的主要問題是,我們通常不知道「在開始和結束之間」點是否應該落在t = 0.5,或者它是否是不同的t值。最簡單的解決方案是查看該點沿總曲線的距離(使用弧長:距離= arclength(c1)/ arclength(c1)+ arclength(c2)將告訴我們)並將其用作t的初始猜測,迭代在任何一方向外看幾個價值。

第二種選擇是求解在「在中間」點的切線向量的通用三次方程。我們形成點

points3 = [ points1[0], points1[1], points1[6], points1[7] ]; 

,然後解決它的導數公式查找具有相同的切線方向(但不是大小!)作爲我們的點之間,一個或多個T值的三次曲線。一旦我們有了這些(我們可能有超過2個),我們評估我們是否可以通過我們的三個興趣點創建一條曲線,並將中間點設置爲每個找到的t值。找到的t值中的任一個或零將產生法律曲線。如果我們有一個:完美的,我們找到了一個簡化。如果我們找不到,那麼複合曲線就不能簡化成一個三次曲線。

+0

感謝詳細的解答您的文章。我之前看到過'BézierCurves的入門',但現在對我來說太複雜了,不是我的水平。 就我而言,我只有兩個曲線,我不知道中間點在哪裏。那麼,我可以檢查一下,這個複合曲線可以使用幾個公式來簡化,或者它更復雜的任務? – RazrFalcon

+1

除了你想要做的事情沒有「正義」這個事實。你想要的是一個數學上難以解決的問題,可以通過使用鏈接部分文章中的公式來簡化。如果您需要演示代碼才能工作,請點擊查看源代碼按鈕,然後從BezierComputer類中「竊取」代碼。另外請注意,底漆不是「不是我的水平」,它只是它是什麼。如果你想直接使用Bezier曲線而不是僅僅使用Bezier曲線,那麼你選擇了一個很難的主題,而且你需要投入一些工作=) –

+0

我看到了...無論如何。我會盡量深入你的文章,試圖理解所有這個貝塞爾魔法。 – RazrFalcon

相關問題