在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?
我不想在围绕轴旋转它们之后将转换矩阵应用到点 - 我正在寻找的是一个“椭圆”旋转矩阵,如果有人知道这样的话!
答案 0 :(得分:6)
定义矩阵A以将目标椭圆缩放到合适的单位圆。
然后A的组成,旋转矩阵和A的倒数是你的椭圆旋转矩阵。