この3x3マトリックスを使用して、平行移動、スケーリング、回転などの基本的な変換を実行していますが、回転部分が正常に機能していません。30度程度を超える角度の場合、見た目は奇妙です。
メソッドは次のようになります。
public void rotate(float angle) {
double rads = angle * (Math.PI/180);
float sin = (float) Math.sin(rads);
float cos = (float) Math.cos(rads);
matrix[0][0] = cos;
matrix[0][1] = -sin;
matrix[1][0] = sin;
matrix[1][1] = cos;
}
そして、変換を適用する方法:
Xの場合:
public float[] applyTransformX(float[] x, float[] y) {
float[] transformed = new float[x.length];
for(int i=0; i<x.length; i++) {
transformed[i] = (x[i] * matrix[0][0]) + (y[i] * matrix[0][1] + matrix[0][2]);
System.out.println((x[i] * matrix[0][0]) + (y[i] * matrix[0][1] + matrix[0][2]));
}
return transformed;
}
Yについて:
public float[] applyTransformY(float[] x, float[] y) {
float[] transformed = new float[x.length];
for(int i=0; i<x.length; i++) {
transformed[i] = (x[i] * matrix[1][0]) + (y[i] * matrix[1][1] + matrix[1][2]);
}
return transformed;
}
ここで欠けている基本的なことはありますか?固定小数点の周りで変換を行っていないという事実を認識しています。それがおそらく私がこの問題を経験している理由ですか?
私が言ったように、変換とスケーリングは正常に機能しています。