哪个更耗内存?矩阵或三角函数变换

Which one is more memory-consuming? Matrix or trigonometry transformations

我写了两种不同的方法来将欧拉角转换为归一化单位方向向量。但我不确定哪个更快。是用三角运算的还是用矩阵变换前向向量的?

D3DXVECTOR3 EulerToDir(D3DXVECTOR3 EulerRotation) { return D3DXVECTOR3(sin(EulerRotation.x)*cos(EulerRotation.y), -sin(EulerRotation.y), cos(EulerRotation.x)*cos(EulerRotation.y)); }//Convert euler angles to the unit direction vector.
D3DXVECTOR3 EulerToDirM(D3DXVECTOR3 EulerRotation)//Same thing but using matrix transformation. More accurate. 
{                    
    D3DXMATRIX rotMat;
    D3DXMatrixRotationYawPitchRoll(&rotMat, EulerRotation.x, EulerRotation.y, EulerRotation.z);

    D3DXVECTOR3 resultVec(0, 0, 1);//Facing towards the z.

    D3DXVec3TransformNormal(&resultVec, &resultVec, &rotMat);

    return resultVec;
}

谢谢。

您可以使用 Big (O) 对函数进行复杂度分析 符号。对于您的示例,它使用依赖于系统的预定义 sine/cosine 函数,并且它以许多不同的方式实现,C++ 决定哪种方式更适合特定的 x(输入)。 Different implementations of sine.

您应该尝试搜索您在 msdn 上执行的矩阵运算的实现的复杂性,尽管我相信 EulerToDirM 函数使用至少 O(N) 的矩阵运算,并且 EulerToDir 给出 O 中的结果(1),哪个更好。

嗯,你到底关心什么?像顶级问题中所述的内存使用情况?还是描述中指定的速度?

如果是速度,唯一真正的判断方法是在您的目标上测量它 architecture/environment。尝试猜测通常是浪费时间。

测试自包含代码片段性能的最简单方法是设置一个单元测试,您可以在其中执行如下操作:

// setup everything first
time startTime = getCurrentTimeInMicros()
for (int i = 0; i < NUM_ITERATIONS; ++i)
{
    // code to be performance tested
}
time endTime = getCurrentTimeInMicros()

然后你可以执行 endTime - startTime 并查看哪个代码花费了更长的时间 运行。

如果您需要测试内存使用情况,如果它们很简单,您可以打印出 sizeof() 和 classes/structs,否则您可以在使用 valgrind/massif.[=11 检测代码时分配它们=]