6.12303176911189E-17 1 0
-1 6.12303176911189E-17 0
0 0 1
0 1 0
-1 0 0
0 0 1
我应该保留我的矩阵,还是应该将小值设置为零?
public void SetRotate(Vector axis, double angle)
{
double angleSin = Math.Sin(angle);
double angleCos = Math.Cos(angle);
double a = 1.0 - angleCos;
double ax = a * axis.X;
double ay = a * axis.Y;
double az = a * axis.Z;
_m11 = ax * axis.X + angleCos;
_m12 = ax * axis.Y + axis.Z * angleSin;
_m13 = ax * axis.Z - axis.Y * angleSin;
_m21 = ay * axis.X - axis.Z * angleSin;
_m22 = ay * axis.Y + angleCos;
_m23 = ay * axis.Z + axis.X * angleSin;
_m31 = az * axis.X + axis.Y * angleSin;
_m32 = az * axis.Y - axis.X * angleSin;
_m33 = az * axis.Z + angleCos;
}
答案 0 :(得分:2)
保留它,只是因为你可以验证计算出的90度矩阵是否与理想结果的有点并不能证明修复此单例的函数 EM>
如果您为此添加修复程序,您也可以为所有其他可能的值添加修复程序......
答案 1 :(得分:1)
简短的回答是,保持原样。
在你的情况下,你使用浮点数学生成一般旋转矩阵,这是不准确的:请注意,即使你的角度(弧度)尽可能接近pi / 2,它也不会精确90度。
如果您的目标是在打印出供人类消费的数字之前进行清理,则应该确定输出。在工作矩阵中将小值设置为零几乎肯定是主动错误的,并且会在你最不期望的时候再次咬你...
答案 2 :(得分:0)
这一切都取决于,如果这不会导致任何缺点(对齐平面之间的Z-Fighting,代码可读性较差)并且您需要平滑过渡然后离开它。否则,您可能希望将旋转/缩放舍入到下一度/ 0.1步。