5

translateキャンバス上で/のような変換関数を使用するrotateと、任意のキャンバス関数に渡されるときにすべてのポイントが変換されます。これは魅力のように機能しますが、実際に描画せずに変換されたポイントを簡単に取得する方法もありますか?

これは、デバッグ時に非常に役立ちます。今できることは、ポイントがどこで終わるかを調べることだけですが、計算された変換された座標を取得できないようです。

それで、私が90度回転すると、点を取り(つまり(10, 0))、変換された点を戻す(つまり(0, 10))関数はありますか?

私は基本的にこのようなものを意味します:

ctx.rotate(90 * Math.PI / 180);
ctx.transformed(10, 0); // would return (0, 10) as an array or something
4

2 に答える 2

4

簡単な答えは「デフォルトではありません」です。

現在の変換を取得する方法がないため、自分で現在の変換を追跡する必要があります(これは非常に不必要であると思われるため、人々はバグを提出しました)。

Cake.jsのようなライブラリ、および私たちの多くは、このようなことを実行できるように、変換コードを追跡するために基本的に変換コードを複製します。それを追跡したら、必要なのは次のとおりです。

function multiplyPoint(point) {
  return {
    x: point.x * this._m0 + point.y * this._m2 + this._m4,
    y: point.x * this._m1 + point.y * this._m3 + this._m5
  }
}
于 2011-05-23T15:07:22.570 に答える