3

わかりました。まず最初に、同様の質問が Web のいたるところにあることを知っています。数え切れないほど調べました。現在、ほぼ 3 週間にわたってそれを理解しようとしています (常にではなく、オンとオフだけです)。 、洞察の火花を期待しています)。

最後に、私が取得したいのは、回転したい量を渡す関数です (現在、私はラジアンで作業していますが、度またはラジアンに行くことができます)。私が持っていた翻訳。

2Dデカルト平面で「Z」軸を中心に回転する式は次のとおりです。

[cos(radians)    -sin(radians)    0]
[sin(radians)     cos(radians)    0]
[0                0               1]

行列演算 (加算、減算、乗算、行列式/逆行列) はかなりよく理解していますが、理解していないのは、回転に使用できる行列を段階的に作成し、変換を維持する方法です (スケールのようなその他のもの) があります。

他の例から集めたものから、現在のマトリックス (それが何であれ、今は単位マトリックスを使用しましょう) を次のようなマトリックスで乗算します。

[cos(radians) - sin(radians)]
[sin(radians) + cos(radians)]
[1]

しかし、元のマトリックスは 3x3 ではなく 3x1 マトリックスになってしまいますね。何が欠けているのかわかりませんが、何かが正しくないように思えます。誰かが私のために書いてくれるコードを必ずしも探しているわけではありません。これを適切に行う方法を理解し、自分で書くことができるようにするためです。(他の人のコードを見ないというわけではありません:))

(誰にとっても重要かどうかはわかりませんが、念のため、Windows 7 64ビット、Visual Studio 2010 Ultimateを使用しており、OpenGLを信じています。これはUni用です)

私たちがそれに取り組んでいる間、誰かが私のためにこれを再確認できますか? それが正しいように見えることを確認するだけです。

翻訳マトリックス (ここでも Identity を使用します) は次のようなものです。

[1, 0, X translation element]
[0, 1, Y translation element]
[0, 0, 1]
4

3 に答える 3

1

私は同じ問題に直面し、この SO questionで満足のいく式を見つけました。それぞれ、角度のコサイン値とサイン値、および
回転の中心の座標とします。 座標の 2 次元の点を変換するには、同次の 3x1 座標に次の 3x3 行列を掛ける必要があります。(cos0, sin0)(x0, y0)
(x,y)(x,y,1)

[cos0,    -sin0,   x0-(cos0*x0 - sin0*y0)]
[sin0,     cos0,   y0-(sin0*x0 + cos0*y0)]
[   0,        0,                       1 ]

3 番目の列の値は、回転の中心がシステムの原点ではない場合に適用する必要がある移動量です。

于 2014-02-17T03:31:56.767 に答える