给定诸如(0,0,0)的点和像(x,y,z)这样的向量。将负(0,0,0)中心的负Z轴对齐到该向量方向的最简单方法是什么?使用OpenGL的例子很受欢迎,但不是必要的。

有帮助吗?

解决方案

有很多不同的方法可以将坐标框架旋转到指定方向;它们都会让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 );
}

其他提示

您可能想看看 Diana Gruber的文章

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

将向量分为<!> quot; components <!> quot;。 x分量是沿x轴的位移。如果我们转向三角学,我们有cos(alpha)= x / vector_magnitude。如果我们计算RHS,那么我们可以导出alpha,这是我们必须围绕y轴旋转的量。

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

有很多关于旋转坐标(或旋转物体,相同的东西)的资源。我从这个网站中学到了很多,关于如何编程多维度,尤其是如何操纵向量

此处页面有<!>“部分转换用于将矢量移动到z轴<!>;那 似乎是你想要的,或者可能是它的反面。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top