プログラムに、ある点(x_p、y_p、z_p)を別の点(x_m、y_m、z_m)の周りで角度w_nxとw_nyだけ回転させる関数があります。新しい座標は、グローバル変数x_n、y_n、およびz_nに格納されます。y軸を中心とした回転(y値が損なわれないようにw_nxの値を変更する)は正しく機能していますが、x軸またはz軸を中心に回転するとすぐに(w_nyの値を変更します)座標はもう正確ではありません。私は自分のせいであると思う行にコメントしましたが、そのコードの何が問題なのか理解できません。
誰か助けてもらえますか?
void rotate(float x_m, float y_m, float z_m, float x_p, float y_p, float z_p, float w_nx ,float w_ny)
{
float z_b = z_p - z_m;
float x_b = x_p - x_m;
float y_b = y_p - y_m;
float length_ = sqrt((z_b*z_b)+(x_b*x_b)+(y_b*y_b));
float w_bx = asin(z_b/sqrt((x_b*x_b)+(z_b*z_b))) + w_nx;
float w_by = asin(x_b/sqrt((x_b*x_b)+(y_b*y_b))) + w_ny; //<- there must be that fault
x_n = cos(w_bx)*sin(w_by)*length_+x_m;
z_n = sin(w_bx)*sin(w_by)*length_+z_m;
y_n = cos(w_by)*length_+y_m;
}