gpt4 book ai didi

c++ - 围绕另一个 3D 点旋转

转载 作者:太空宇宙 更新时间:2023-11-04 15:24:00 25 4
gpt4 key购买 nike

我的程序中有一个函数可以将一个点 (x_p, y_p, z_p) 围绕另一个点 (x_m, y_m, z_m) 旋转角度 w_nxw_ny

新坐标存储在全局变量 x_ny_nz_n 中。围绕 y 轴 旋转(因此改变 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;
}

最佳答案

代码几乎做了什么:

  • 计算差异 vector
  • 将 vector 转换成spherical coordinates
  • 将 w_nx 和 wn_y 添加到倾角和方位角(请参阅术语链接)
  • 将修改后的球坐标转换回笛卡尔坐标

有两个问题:

  • 转换不正确,您所做的计算是针对两个倾角 vector (一个沿 x 轴,另一个沿 y 轴)
  • 即使计算正确,球坐标系的变换也不等同于绕两轴旋转

因此在这种情况下,使用矩阵和 vector 数学将有所帮助:

b = p - m
b = RotationMatrixAroundX(wn_x) * b
b = RotationMatrixAroundY(wn_y) * b
n = m + b

basic rotation matrices .

关于c++ - 围绕另一个 3D 点旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13275719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com