【发布时间】:2017-01-03 17:14:00
【问题描述】:
是否可以通过将向量旋转到轴并沿轴旋转来计算向量的长度,然后使用该轴来测量向量的长度?如果是这样,它是否比通过毕达哥拉斯/平方根计算长度便宜? 我正在团结工作(C#)
例子:
Vector3 myVector(x, y, z);
Vector3 myVectorRealigned = Quaternion.FromToRotation(myVector, Vector3.up) * myVector;
float myVectorLength1 = sqrt(myVector.x^2 + myVector.y^2 + myVector.z^2);
float myVectorLength2 = myVectorRealigned.y;
当我尝试这个时,它似乎工作!然而,这些方法中哪一种最好用/最便宜?
【问题讨论】:
-
如果您使用的是 Visual Studio,它有一个内置的分析器。它会让你衡量两者的表现。
-
我建议@BrandonIbbotson 所说的,但我可以想象规范会更快,因为四元数计算也需要 sqrt 并且旋转涉及比规范更多的乘法。
-
为了性能,有时最好不要平方和。比如当你想比较距离时。
-
通过旋转计算向量长度是一个完全坏主意,因为您正在计算三个分量,其中两个将为零。不算,要获得轮换,您需要规范等等。
标签: c# optimization unity3d quaternions