0

WPF 変換クラスに関する私の理解では、Matrixクラスは、最終列が常に (0,0,1). この設計の理由は、2x2 行列が使用された場合に必要となるベクトルとして個別に変換するのではなく、回転、スケール、およびスキュー変換と同じ方法で、変換を行列乗算として表現できるようにするためであることを理解しています。

したがって、ベクトルに翻訳を含む行列を掛けると、結果のベクトルが翻訳されるはずです。これは、WPF マトリックス クラスを使用している場合には発生していないようですが、何が間違っているのでしょうか?

Matrix m = new Matrix();
m.Translate(12, 34);

Vector v = new Vector(100, 200);
Vector r = Vector.Multiply(v, m);

// Confirm that the matrix was translated correctly
Debug.WriteLine(m);

// Confirm that the vector has been translated
Debug.WriteLine(r);

結果:

1,0,0,1,12,34    // Matrix contains translation as expected
100,200          // Vector is unchanged - not expected
4

1 に答える 1

2

今わかりました。ベクトルポイントの違いは重要です。代わりに Points と Point.Multiply を使用する必要があり、結果は期待どおりです。ベクトルは、移動の影響を受けない 2 点間の差ですが、点は影響を受ける特定の位置です。

于 2013-05-01T16:18:39.880 に答える