球体を任意の角度に回転させたいです。
任意の回転で得られる新座標系(X,Y,Z)の座標値を旧座標系(x,y,z)の座標値で表したいです。今新しい座標系(X,Y,Z)が旧座標系(x,y,z)をx軸の周りに角度αだけ回転させて(x,Y’,Z’)とし、それをさらにY’軸の周りに角度βだけ回転させて(X’,Y’,Z)とします。そしてさらにZ軸の周りに角度γだけ回転させることによって(X,Y,Z)に一致させることが出来るとすると新旧の座標は図のようになると思うのですが、プログラムで書くのに苦戦しています。
3×3の行列を参考にしているのですが分からないです。
main() { int i,j,k; int a[2][2] = {{1, 2, 3},{4, 5, 6},{7, 8, 9}}; int b[2][2] = {{4, 5, 6},{1, 2, 3},{7, 8, 9}}; int c[2][2]; for ( i=0; i<=2; ++i){ for ( j=0; j<=2; ++j){ for( k=0; k<=2; ++k){ c[i][j] += a[i][k]*b[k][j]; printf("%d ",c[i][j]); printf("\n"); } } } }
a[3][3] = {{cosγ,sinγ,0},{-sinγ,cosγ,0},{0,0,1}}
b[3][3] = {{cosβ,0,-sinβ},{0,1,0},{sinβ,0,cosβ}}
c[3][3] = {{1,0,0},{0,cosα,sinα},{0,-sinα,cosα}}
d[3][3] = {{x,0,0},{y,0,0},{z,0,0}
a[3][3]*b[3][3]*c[3][3]*d[3][3]の角度を任意で変えていくときの答えの出し方を知りたいです。