2 次元行列を変更する回転関数で何が起こっているかについての情報を探しています。これを見つけましたが、回転を 90、180、または 270 に割り当てても変化はありません。これが私のコードです:
Matrix.prototype.rotate = function(deg) {
var radians = deg * Math.PI / 180,
sin = Math.sin(radians),
cos = Math.cos(radians),
a = this.a,
b = this.b,
c = this.c,
d = this.d,
tx = this.tx,
ty = this.ty;
this.a = a*cos - b*sin;
this.b = a*sin + b*cos;
this.c = c*cos - d*sin;
this.d = c*sin + d*cos;
this.tx = tx*cos - ty*sin;
this.ty = tx*sin + ty*cos;
}
なぜ機能しないのかについての情報を見つけることができましたが、それを修正する方法については何も見つかりませんでした。私が理解していることから、90度回転すると、sinおよび/またはcosが非常に小さい数値になるため、行列に適用しても何も変わりません。これについて間違っている場合はお知らせください。
それを機能させるために、これを関数の先頭に追加しました:
if(!(deg % 90)) {
deg -= .0001;
}
うまくいきますが、数千回回転させた後は、あまり正確ではないと確信しています。誰もがより良い解決策を知っていますか?
実際の回転値は別の場所に保存され、その差が役立つ場合にのみ関数に渡されます。
編集:sinまたはcosが1または-1に等しい場合、何も起こらないことを忘れていました。