3D中两个法线之间的旋转

时间:2015-02-14 16:51:12

标签: math geometry

给定一个平面(在我的例子中是一个三角形)正常N_T和参考标准N_R,两者的长度都是1。

我计算了rotation_normal

N = N_T x N_R

现在我需要计算这个rotation_normal的角度,我得到以下计算:

angle = acos(<N_T, N_R>), with <x,y> is the dotproduct of x and y

此角度在[0°,180°]的区间内,是两个法线之间的最小角度。 所以我的问题是,如果我想以其法线等于参考法线的方式旋转我的三角形,我需要知道计算出的角度在哪个方向(正或负)。

有人知道如何获得这个方向或如何解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

你需要使用atan2(四象限弧形)

3D 2D reference plane slice

  1. 创建参考平面基础向量u,v

    • 必须彼此垂直并位于平面内
    • 最好是单位矢量(或者你需要考虑它的大小)
    • 所以让N=N_T x N_R; ...参考平面正常旋转将会发生
    • U=N_T;
    • V= N x U; ... x表示跨产品
    • 如果它们尚未
    • ,请将它们设为U/=|U|; V/=|V|;
  2. 计算N_R

    的平面坐标
    • u=(N_R.U); ... .表示点积
    • v=(N_R.V);
  3. 计算角度

    • ang=atan2(v,u);
    • 如果您没有atan2,请使用ang= atanxy (u,v);
    • 这将为您提供范围ang=<0,2*M_PI>
    • 的角度
    • 如果您想要签名角度,请添加
    • if (ang>M_PI) ang-=2.0*M_PI; ... M_PI众所周知的常数Pi=3.1415...
    • 现在,如果你想要相反的符号方向,那么只需使用-ang