2011-03-13 55 views
12

鏈接:Official SVG Reference用於速記/平滑SVG路徑計算控制點的Bezier曲線

你好男性和女性,我有一些麻煩速記定義爲SVG路徑貝塞爾曲線(由S或S在pathdata定義)。具體來說,如何計算第一個控制點。假設我們有一條curveto命令,其控制點爲(X1, Y1)(X2, Y2),端點(X3, Y3)和起點(X0, Y0)

接下來是帶有第一控制點(X4, Y4)和第二控制點(X5, Y5)的簡寫/平滑曲線命令。爲了簡單起見,假設所有內容都是絕對座標。

如何從其他已知點計算未知的第一個控制點(X4, Y4)

+0

可能的重複[如何查找BezierSegment的控制點C#中的開始,結束和2個相交點 - AKA Cubic Bezier 4點插值](http://stackoverflow.com/questions/2315432/how-to-find-control-points-for-a-bezi Ersegment-given-start-end-and-2-intersecti) – Gabe

回答

15

你的第一點是上一條曲線的最後一點。在這種情況下,它會是(x3,y3)。那麼你的第二點就是速記所代表的曲線長度的終點。

如果我們把你的路徑轉化爲兩個全長版本中,我們將有:

M X0, Y0 C X1, Y1 X2, Y2 X3, Y3 
M X3, Y3 C XR, YR X4, Y4 X5, Y5 

凡XR,YR是以前的曲線的最後一個控制點的有關當前的第一點反射曲線。

XR,YR只是​​約P3 P2的反射這樣:

XR = 2*X3 - X2 and 
YR = 2*Y3 - Y2 
+0

沒有任何誤解,我只是稱第一個控制點爲第二條曲線(X4,Y4),而您將其稱爲(XR,YR)。 –

+0

對不起,我的意思是第一點,因爲...現在編輯... – KeatsKelleher

+1

我試過去測試這個,這是正確的!謝謝! –

0

可以從最後一條曲線和最後一條曲線的終點(這是第一點把最後一個控制點新曲線)作爲一條線,並且鏡像控制點應位於該線上,距離等於從上一個控制點到最後一個端點的距離