2011-11-20 46 views
1

格式SVG電弧(電弧在XAML具有相同參數):獲取SVG/XAML電弧點

(rx ry x-axis-rotation large-arc-flag sweep-flag x y) 

描述:

繪製橢圓弧從當前點到(x, Y)。橢圓的大小和方向由兩個半徑(rx,ry)和一個x軸旋轉定義,這表示橢圓作爲整體相對於當前座標系旋轉的方式。橢圓的中心(cx,cy)自動計算以滿足其他參數施加的約束。大弧標誌和掃描標誌有助於自動計算並幫助確定如何繪製弧線。

我需要計算它的所有點(當然有一些步驟)。我如何做到這一點?我想在C#或Java上編碼。

回答

3

Bresenham算法是爲逐點繪圖而發明的。 找到的旋轉橢圓某些代碼: http://research.microsoft.com/en-us/um/people/awf/graphics/bres-ellipse.html

加了: 如何變換零爲中心的橢圓所需隱形式(A,B,C,d,E,F)

甲:=(COS (fi)/ rx)^ 2 +(Sin(fi)/ ry)^ 2; (Sin(fi)/ rx)^ 2 +(Cos(fi)/ ry)^ 2;其中, B:= Sin(2 * fi)(1 /(ry ry)-1 /(rx * rx));其中,

D = E = 0;

F:= - 1

檢查RX = 100,RY = 60,FI =π/ 6: enter image description here

一個步驟:Delphi函數以獲得隱形式爲任意橢圓。 我希望代碼是可以理解的(SQR(x)= X * X)

//calc implicit ellipse equation 
//semiaxes rx, ry; rotated at fi radians; centered at (cx,cy) 
//x = rx * Cos(t) * Cos(fi) - ry * Sin(t) * Sin(fi) + cx 
//y = rx * Cos(t) * Sin(fi) + ry * Sin(t) * Cos(fi) + cy 
//To obtain implicit equation, exclude t 
//note: implicit form Ax^2+Bxy+Cy^2+Dx+Ey+F=0 (not 2B,2D,2E) 

procedure CalcImplicitEllipseEquation(rx, ry, fi, cx, cy: Double; 
             var A, B, C, D, E, F: Double); 
begin 
    B := Sin(2 * Fi) * (ry * ry - rx * rx); 
    A := Sqr(ry * Cos(fi)) + Sqr(rx * Sin(fi)); 
    C := Sqr(rx * Cos(fi)) + Sqr(ry * Sin(fi)); 
    D := -B * cy - 2 * A * cx; 
    E := -2 * C * cy - B * cx; 
    F := C * cy * cy + A * cx * cx + B * cx * cy - rx * rx * ry * ry; 
end; 
+0

但如何變換(RX RY x軸旋轉的大圓弧標誌掃描標誌X Y)至(A B C dëF)? – AndreyAkinshin