4

给定一个点,例如 (0, 0, 0) 和一个向量,例如 (x, y, z)。对齐以 (0, 0, 0) 为中心的负 Z 轴以指向该向量的方向的最简单方法是什么?欢迎使用 OpenGL 的示例,但不是必需的。

4

5 回答 5

14

旋转坐标系以指向给定方向有很多不同的方法;它们都会使 z 轴指向您想要的方向,但 x 轴和 y 轴的方向会有所不同。

以下为您提供最短的轮换,这可能是也可能不是您想要的。

vec3 target_dir = normalise( vector );
float rot_angle = acos( dot_product(target_dir,z_axis) );
if( fabs(rot_angle) > a_very_small_number )
{
    vec3 rot_axis = normalise( cross_product(target_dir,z_axis) );
    glRotatef( rot_angle, rot_axis.x, rot_axis.y, rot_axis.z );
}
于 2008-10-11T12:43:47.223 回答
1

要回答我自己的问题,我想出的最佳答案是:

将向量分成“分量”。x 分量是沿 x 轴的位移。如果我们转向三角学,我们有 cos(alpha) = x / vector_magnitude。如果我们计算 RHS,那么我们可以推导出 alpha,这是我们必须绕 y 轴旋转的量。

然后可以通过一系列调用 glRotatef() 将坐标系与向量对齐

于 2008-10-11T10:02:51.747 回答
1

你可能想看看Diana Gruber 的文章

于 2009-07-06T13:42:02.063 回答
0

有很多关于旋转坐标(或旋转对象,相当于同一件事)的资源。我从这个网站学到了很多东西,包括如何进行多维编程,尤其是如何操作向量。

于 2008-10-11T19:44:22.803 回答
0

此处的页面有一个“将矢量移动到 z 轴的转换”部分,这似乎是您想要的,或者可能是它的倒数。

于 2008-11-05T20:05:17.327 回答