3

だから私はSVG座標系に少し困惑しています。私はSVGオブジェクトをポリゴンに変換するプロジェクトを行っています(ポリゴンはOpenGLに表示されます)。四角形、円、パス(曲線近似を使用)などを取得し、それらを各オブジェクトの点のセットに変換するすべてのコードがあります。これはこれまでのところすべてうまく機能しています。

私は今、変換を実装している段階にあります。すべての行列関数を記述して準備ができていますが、translate(x、y)と0,0中心の操作(主に回転とスケーリング)の関係に混乱しています。

したがって、0,0にオブジェクトがあるとしましょう。rotate(45, 100, 100)と同等ですがtranslate(100, 100) rotate(45) translate(-100, -100)、オブジェクトを100,100に移動しても、回転が0,0で適用されている場合、回転の中心がオブジェクトの元の位置に対して実際に-100、-100で発生するという意味ではありませんか?

私の質問はtranslate、オブジェクトの座標系にどのように影響するかということだと思います。オブジェクトを移動せずに指定されたポイントに0,0を移動するために使用される場合もあれば、オブジェクトを移動するために使用される場合もあるようです。

座標系の理解に完全に欠陥がありますか?

4

1 に答える 1

5

SVG仕様は座標変換をかなり明確に説明していると思います。すべての変換は、現在の座標に3x3行列を掛けることを意味します。transform属性で指定できる最も一般的な変換はカスタムですがmatrix(...)、他のすべての種類の変換(移動、回転、拡大縮小、傾斜)は使いやすいショートカットです。結局、すべてがマトリックスとして終わります。

複数の変換を組み合わせるのは簡単です。つまり、各変換行列が他の変換行列と順番に乗算されます。すべての変換を追跡するということは、この乗算から得られた最終的な3x3行列を記憶し、要素の最終的な座標を計算することを意味します。初期座標の3x1行列にその3x3行列を掛けるだけです。

したがって、私のアドバイスは、行列を操作するだけで、各変換を手動で適用することを忘れることです。

于 2012-06-26T15:49:34.927 に答える