Кто-нибудь знается на матричных алгоритмах?)
Есть у меня такие методы поворота вокруг осей
public void rotX(int angle) {
int c = Util3D.cos(angle);
int s = Util3D.sin(angle);
int Nyx = (m10 * c + m20 * s)>>12;
int Nyy = (m11 * c + m21 * s)>>12;
int Nyz = (m12 * c + m22 * s)>>12;
int Nzx = (m20 * c - m10 * s)>>12;
int Nzy = (m21 * c - m11 * s)>>12;
int Nzz = (m22 * c - m12 * s)>>12;
m10 = Nyx;
m11 = Nyy;
m12 = Nyz;
m20 = Nzx;
m21 = Nzy;
m22 = Nzz;
}
public void rotY(int angle) {
int c = Util3D.cos(angle);
int s = Util3D.sin(angle);
int Nxx = (m00 * c + m20 * s)>>12;
int Nxy = (m01 * c + m21 * s)>>12;
int Nxz = (m02 * c + m22 * s)>>12;
int Nzx = (m20 * c - m00 * s)>>12;
int Nzy = (m21 * c - m01 * s)>>12;
int Nzz = (m22 * c - m02 * s)>>12;
m00 = Nxx;
m01 = Nxy;
m02 = Nxz;
m20 = Nzx;
m21 = Nzy;
m22 = Nzz;
}
public void rotZ(int angle) {
int c = Util3D.cos(angle);
int s = Util3D.sin(angle);
int Nyx = (m10 * c + m00 * s)>>12;
int Nyy = (m11 * c + m01 * s)>>12;
int Nyz = (m12 * c + m02 * s)>>12;
int Nxx = (m00 * c - m10 * s)>>12;
int Nxy = (m01 * c - m11 * s)>>12;
int Nxz = (m02 * c - m12 * s)>>12;
m10 = Nyx;
m11 = Nyy;
m12 = Nyz;
m00 = Nxx;
m01 = Nxy;
m02 = Nxz;
}
rotX работает не правильно( т.е. им можно пользоваться, но результат не совпадает с таким поворотом
public void setRotX(int i) {
i = angle(i);
m00 = FP;
m01 = 0;
m02 = 0;
m03 = 0;
m10 = 0;
m11 = cos[i];
m12 = -sin[i];
m13 = 0;
m20 = 0;
m21 = sin[i];
m22 = cos[i];
m23 = 0;
}
rotX для другой системы координат чтоли
Дайте правильные методы для поворота