计算三维点与平面之间的距离,c++

Calculate the 3d distance between point and plane, C++

本文关键字:距离 c++ 之间 平面 三维 计算      更新时间:2023-10-16

我使用:D = |ax + by + cz + D |/|n|其中n为平面法线;A, b, c, d是平面方程的系数;X y z是这个点在平面上的坐标。计算从3d点到3d平面的距离。我遇到的问题是,所讨论的距离非常小,这导致结果(双精度)以科学记数法表示,这在if语句中无法正确处理。例如:

if( dist == 0 )
{
    //Execute this
}

如果dist是任何科学数字,则执行If语句中的代码,即使dist不为0。我的问题是,无论如何,科学数字可以转换回固定的符号,使其在类似于这些if语句中可用??我使用VisualStudio 2010, c++。

通常您会使用一些容差值来比较浮点数:

#define EPSILON (1e-6)
// dist == 0.0?
if (dist < EPSILON) {
    // ...
}

或与任何其他浮点数v进行比较:

// dist == v?
if (fabs(dist - v) < EPSILON) {
    // ...
}

当然,您必须根据您的问题选择EPSILON。

dist不以科学记数法表示(除非您将其存储为字符串),这就是它的打印方式。另一个小问题是,与值或相同类型进行比较通常是一个好主意。0为整型,0.0为双精度。

从我可以从一些快速测试中看到,为了让你看到dist == 0为真,它实际上必须为零。这意味着您可以将所有数字降至DBL_MIN,即64位IEEE754 fpu的2.2250738585072014e-308。更有可能是你的数学错了,实际上是零。除法前检查一下分子。

那么大的尺寸到底是什么?如果你用"宇宙直径"的单位来指定电子的直径,那就只有3.2×10^-42了。我不确定有没有一种简单的方法来形象化地描述双精度的大小。我试着用宇宙中1/1的原子数,但还是不够小。