我应该在旋转矩阵中留下小值吗?

时间:2011-08-18 10:27:15

标签: opengl graphics

我的矩阵

6.12303176911189E-17 1 0
-1 6.12303176911189E-17 0
0 0 1

旋转矩阵计算 here

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;
}

3 个答案:

答案 0 :(得分:2)

保留它,只是因为你可以验证计算出的90度矩阵是否与理想结果的有点并不能证明修复此单例的函数 EM>

如果您为此添加修复程序,您也可以为所有其他可能的值添加修复程序......

答案 1 :(得分:1)

简短的回答是,保持原样。

在你的情况下,你使用浮点数学生成一般旋转矩阵,这是不准确的:请注意,即使你的角度(弧度)尽可能接近pi / 2,它也不会精确90度。

如果您的目标是在打印出供人类消费的数字之前进行清理,则应该确定输出。在工作矩阵中将小值设置为零几乎肯定是主动错误的,并且会在你最不期望的时候再次咬你...

答案 2 :(得分:0)

这一切都取决于,如果这不会导致任何缺点(对齐平面之间的Z-Fighting,代码可读性较差)并且您需要平滑过渡然后离开它。否则,您可能希望将旋转/缩放舍入到下一度/ 0.1步。

相关问题