c++ - 查找 2 个 3D 点之间的距离

标签 c++ 3d distance math.h square-root

我遇到了一个问题,我的 X 平方总是变得无穷大,导致结果距离也是无穷大,但是我自己的数学看不出有什么问题:

// Claculate distance

xSqr = (x1 - x2) * (x1 - x2);
ySqr = (y1 - y2) * (y1 - y2);
zSqr = (z1 - z2) * (z1 - z2);

double mySqr = xSqr + ySqr + zSqr;

double myDistance = sqrt(mySqr);

当我运行我的程序时,我得到每个坐标的用户输入,然后在我运行计算后显示距离。

最佳答案

如果您的输入是单精度float,那么如果您强制执行 double 运算应该没问题:

xSqr = double(x1 - x2) * (x1 - x2);
//     ^^^^^^

如果输入已经是 double 的,并且您没有可用的更大的浮点类型,那么您需要重新安排欧氏距离计算以避免溢出:

r = sqrt(x^2 + y^2 + z^2)
  = abs(x) * sqrt(1 + (y/x)^2 + (z/x)^2)

其中 x 是三个坐标距离中最大的一个。

在代码中,这可能类似于:

double d[] = {abs(x1-x2), abs(y1-y2), abs(z1-z2)};
if (d[0] < d[1]) swap(d[0],d[1]);
if (d[0] < d[2]) swap(d[0],d[2]);
double distance = d[0] * sqrt(1.0 + d[1]/d[0] + d[2]/d[0]);

或者,使用 hypot,它使用类似的技术来避免溢出:

double distance = hypot(hypot(x1-x2,y1-y2),z1-z2);

虽然这在 2011 年之前的 C++ 库中可能不可用。

关于c++ - 查找 2 个 3D 点之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14568249/

相关文章:

python - 大型 NumPy 数组的成对距离(分块?)

c++ - 查找立体图像中匹配像素的距离

c++ - 我怎样才能将一个类的填充字节归零?

opengl - 查看视锥体剔除问题

algorithm - CAD 的分解图算法

python - 半正弦函数的 Python 数学库中出现错误

c++ - 使用链表会导致内存泄漏吗?

c++ - C++ 新手, "EXC_BAD_ACCESS"错误我不明白

opencv - 3D对象转换以匹配位置

python - 使用 Python 查找最相似的行