椭圆旋转矩阵?

时间:2009-07-06 13:28:50

标签: c++ math

在C ++中,我们可以围绕任意轴旋转一个点:

  void radRotateAxis( float a, float b, float c, float theta )
  {
    float newX = (
      x*( a*a*(1-cos(theta)) + cos(theta)   ) +
      y*( a*b*(1-cos(theta)) - c*sin(theta) ) +
      z*( a*c*(1-cos(theta)) + b*sin(theta) ) );

    float newY = (
      x*( a*b*(1-cos(theta)) + c*sin(theta) ) +
      y*( b*b*(1-cos(theta)) + cos(theta)   ) +
      z*( b*c*(1-cos(theta)) - a*sin(theta) )  );

    float newZ = (
      x*( a*c*(1-cos(theta)) - b*sin(theta) ) +
      y*( b*c*(1-cos(theta)) + a*sin(theta) ) +
      z*( c*c*(1-cos(theta)) + cos(theta)   )  );

    x = newX ;
    y = newY ;
    z = newZ ;
  }

但是当我们走θ时 - > 2PI围绕您正在旋转的轴

围绕“单位圆”

我们怎样才能使它成为theta 0 - > 2PI结果是关于椭圆宽度a,高度b?

我不想在围绕轴旋转它们之后将转换矩阵应用到点 - 我正在寻找的是一个“椭圆”旋转矩阵,如果有人知道这样的话!

1 个答案:

答案 0 :(得分:6)

定义矩阵A以将目标椭圆缩放到合适的单位圆。

然后A的组成,旋转矩阵和A的倒数是你的椭圆旋转矩阵。