为啥我将一个Vector3旋转之后再反向旋转同样角度,得到的数值却不一样?
- C# code
float Angle = 90;//角度值 Vector3 V = new Vector3(100, 0, 0); Matrix M1 = Matrix.RotationZ((float)(Math.PI * Angle) / 180); Vector3 V1 = Vector3.TransformNormal(V, M1); Matrix M2 = Matrix.Invert(M1); Vector3 V2 = Vector3.TransformNormal(V1, M2); if (V == V2) { MessageBox.Show("True"); } else { MessageBox.Show("False"); }
除了45及其倍数的角度是True,其他的角度都传回False,请问有啥方法能将使其在所有角度都返回True。
[解决办法]
应该属于float/double精度问题吧,类似0.3333f不等于1.0f/3;
估计里面用了类似tan()的函数,只有在特殊角度,比如45度时,tan()结果为1,不会出现精度误差...
可以考虑自己写允许一定的误差的比较函数,而不是直接用Vector3的比较。