I have a function in my program which rotates a point (x_p, y_p, z_p)
around another point (x_m, y_m, z_m)
by the angles w_nx
and w_ny
.
新坐标存储在全局变量 x_n
、 y_n
和 z_n
中。围绕 y-axis
旋转(所以改变 w_nx
的值 - 以便 y
值不会受到伤害)工作正常,但围绕 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;
}
原文由 Andi Faust 发布,翻译遵循 CC BY-SA 4.0 许可协议
代码几乎做了什么:
有两个问题:
因此,在这种情况下,使用矩阵和向量数学将有助于:
基本旋转矩阵。