椭圆旋转矩阵?

3
在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 ; }
但是当我们将theta从0变化到2PI时,这会使得该点沿着您旋转的轴周围的“单位圆”移动。
如何使得当theta从0变化到2PI时,结果围绕一椭圆形状,宽度为a,高度为b?
我不想在旋转点之后应用变换矩阵 - 我要找的是一个“椭圆形”旋转矩阵,如果有人知道这样的东西!

你最好去一个专门的数学论坛问问。 - Noldorin
首先,不要在椭圆中使用a和b,因为a和b已经是您代码中的变量; 其次,您需要指定椭圆轴的方向; 有了这个,您可以根据theta进行缩放,将您的圆形路径转换为椭圆路径。 - e.tadeu
1个回答

6

定义一个矩阵A,将目标椭圆缩放到适当的单位圆。

然后,A矩阵、旋转矩阵和A矩阵的逆矩阵的组合就是您的椭圆旋转矩阵。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接