给定诸如(0,0,0)的点和像(x,y,z)这样的向量。将负(0,0,0)中心的负Z轴对齐到该向量方向的最简单方法是什么?使用OpenGL的例子很受欢迎,但不是必要的。
答案 0 :(得分: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 );
}
答案 1 :(得分:1)
要回答我自己的问题,我提出的最佳答案是:
将向量分为“组件”。 x分量是沿x轴的位移。如果我们转向三角学,我们有cos(alpha)= x / vector_magnitude。如果我们计算RHS,那么我们可以导出alpha,这是我们必须围绕y轴旋转的量。
然后通过对glRotatef()的一系列调用,坐标系可以与向量对齐
答案 2 :(得分:1)
您可能希望查看Diana Gruber's文章
答案 3 :(得分:0)
有很多关于旋转坐标(或旋转物体,相同的东西)的资源。我从this site学到了很多东西,关于如何在多个方面进行编程,特别是how to manipulate vectors
答案 4 :(得分:0)
页面here有一个“将矢量移动到z轴的转换”部分 似乎是你想要的,或者可能是它的反面。