代码之家  ›  专栏  ›  技术社区  ›  fluffels

将Z轴与向量对齐的最简单方法是什么?

  •  4
  • fluffels  · 技术社区  · 18 年前

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

    5 回复  |  直到 15 年前
        1
  •  14
  •   Mike F    18 年前

    有很多不同的方法可以旋转坐标系指向给定的方向;它们都会使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 );
    }
    
        2
  •  1
  •   bobobobo    17 年前

    你可能想看看 Diana Gruber's 文章

        3
  •  1
  •   Community Mohan Dere    15 年前

    为了回答我自己的问题,我想到的最佳答案是:

    将矢量向上分为“分量”。X分量是沿X轴的位移。如果我们用三角学,我们得到cos(alpha)=x/向量大小。如果我们计算rhs,那么我们就可以得到alpha,这是绕y轴旋转的量。

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

        4
  •  0
  •   Simon    18 年前

    有很多关于旋转坐标的资源(或者旋转物体,它们的数量是一样的)。我从中学到很多东西 this site 关于如何在多个维度中编程,尤其是 how to manipulate vectors

        5
  •  0
  •   Glenn    17 年前

    页面 here 有一个“将向量移动到z轴的变换”部分, 似乎是你想要的,或者可能是相反的。