繁体   English   中英

计算点和平面之间的3d距离,C ++

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

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

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

如果dist是任何科学数字,即使dist不为0,也会执行if语句中的代码。我的问题是,是否可以将科学数字转换回固定的表示法以使其可用于类似于这些的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 /宇宙中的原子数,但它仍然不够小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM