2012-01-01 9 views
1

私はカスタムpyQt SVGレンダラに取り組んでおり、助けが必要です。純粋に数学的なので、APIは必要ありません。SVG elipitical arcによる計算?

SVG楕円弧を計算するには、2つの半径rxryが必要です。度での楕円の回転x-axis-rotation;弧が180度より大きくまたは180度より小さく描かれているかどうか、および円の周りの弧の方向を決定するlarge-arc-sweep-flag(1または0)。 sweep-flag(1または0)は、円弧が負または正の方向に描画されるかどうかを決定します。最後のxyの値が弧の終わりを決定します。

ただし、QPainterPath.arcTo(self, float x, float y, float w, float h, float startAngle, float arcLenght)は、境界矩形x, y, w, hを使用します。開始角度startAngle; arcLength/sweepLengthはアーク自体の長さです。 SVGコマンドをarcTo()メソッドで使用できるものに変換するにはどうすればよいですか?

出典: W3C SVGQPainterPath

答えて

1

SVG楕円弧は、 "エンドポイントのパラメータ化" を使用しています。

QPainterPath.arcToアークは「中心パラメータ設定」を使用します。

親切に提供されたSVGリンクには、 "Elliptical arc implementation notes"というタイトルのセクションの近くにリンクがあり、エンドポイントとセンターのパラメータ化の間にformulas for the conversionとなります。 QPainterPath.arcTo documentationコール署名が

QPainterPath.arcTo (self, QRectF rect, float startAngle, float arcLength) 

代わりarcLength、その説明はsweepLengthを指していることを述べていること


は最初、所定の矩形を占める円弧を作成します 指定されたstartAngleで、sweepLength度は まで反時計回りに延長されます。

奇妙なことに、sweepLengthは度で測定され、arclengthは常に距離である従来の数学的な意味を持ちます。

ドキュメントで混乱しているパラメータ名 "arclength"を使用していますが、arcToの最後の引数はスイープ角度Δθです。

θ1のSVGインプリメンテーションノートの数式を使用すると、ΔθはstartAnglearcLengthにそれぞれ使用できると思います。

+0

リンクのおかげで、私はそれを基本的な代数と三角法を超えて作りましたが、これは理解するのが少し難しいです。外接矩形「x = w-rx」、「y = h-ry」、「w = rx * 2」、「h = ry * 2」。うまくいけば、 'startAngle'と' arcLength'がうまくいきました。 – Christopher

+0

ご協力いただきありがとうございます。私はちょうどそれらの方程式をPythonに翻訳する方法を誰かに尋ねるつもりですが、正しい方向に私を指してくれてありがとう。 – Christopher

関連する問題