首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DirectXMath测量两点之间距离的最佳方法是什么

使用DirectXMath测量两点之间距离的最佳方法是什么
EN

Stack Overflow用户
提问于 2012-04-24 12:46:55
回答 2查看 12.2K关注 0票数 5

使用新的XMVECTOR和XMFLOAT3类,获得两点之间距离的最佳方法是什么?我在XMVector*系列的函数中找不到一个可以做到这一点的函数,所以我想出了以下方法:

代码语言:javascript
复制
float distance(const XMFLOAT3& v1,const XMFLOAT3& v2)
{
    XMVECTOR vector1 = XMLoadFloat3(&v1);
    XMVECTOR vector2 = XMLoadFloat3(&v2);
    XMVECTOR vectorSub = XMVectorSubtract(vector1,vector2);
    XMVECTOR length = XMVector3Length(vectorSub);

    float distance = 0.0f;
    XMStoreFloat(&distance,length);
    return distance;
}

这会比一个只有3个浮点数的普通Vector3类更快吗?即:

代码语言:javascript
复制
float Distance(const Vector3& point1,const Vector3& point2)
{
    float distance = sqrt( (point1.x - point2.x) * (point1.x - point2.x) +
                            (point1.y - point2.y) * (point1.y - point2.y) +
                            (point1.z - point2.z) * (point1.z - point2.z) );
    return distance;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-28 14:30:46

只有一种方法可以得到点之间的距离。这就是你描述的方式。vec3 diff = b - a; float distance = sqrtf(dot(diff, diff));

这会比普通的Vector3类更快吗?只有3个浮点数的x,y,z,然后使用sqrt,因为它使用了内部优化?

如果你担心性能,你需要分析你的应用程序,而不是试图猜测什么会更快。在你的应用程序中,“低效”解决方案的影响很可能是完全不可察觉的。

如果你开始自己编写例程,你也很有可能会降低它们的效率,或者引入bug。例如,您的“手写”代码(取决于编译器)可能比使用"XMVECTOR“的原始代码执行更多的浮点计算。在你的例程中,你需要计算两次向量之间的差值。如果编译器没有对此进行优化,你最终会得到6减法,2个加法,1个sqrtf和3个乘法。在"XMVECTOR“代码中,您将使用3个减法、2个加法、3个乘法和1个sqrtf。

对于评测应用程序,你可以使用AQTime 7标准版(目前是免费的),或者gprof (如果你正在用gcc/g++编译)。

票数 5
EN

Stack Overflow用户

发布于 2014-05-11 17:32:40

D3DXVec3Length(&(Point1-Point2))等同于距离公式。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10291862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档