计算三维点与平面之间的距离,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平面的距离。我遇到的问题是,所讨论的距离非常小,这导致结果(双精度)以科学记数法表示,这在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的原子数,但还是不够小。
相关文章:
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 用C++程序计算圆锥体的体积、球体的体积、八边形的面积和两点之间的距离
- 计算所有对之间的曼哈顿距离
- 如何使用发送数据包所花费的时间计算两个节点之间的距离?
- Levenshtein 两个文件的距离花费了太多时间
- 两个有符号数字之间的距离
- 计算车辆之间的距离并设置速度,使距离保持不变,例如 5 米
- 计算两个迭代器之间的距离时"Vector Iterators Incompatible"
- 浮动距离为80位长双精度
- 查找彼此之间具有不同最小距离的随机数
- 相同字符之间的最小距离
- 如何根据距离矩阵确定节点?
- 如何排列二进制字符串以最小化它们之间的距离
- 曼哈顿距离比曼哈顿距离+线性冲突效果更好
- 使用C++中的链表对与原点的距离、x 和 y 坐标进行排序
- 应该如何编写用于计算最近点距离的C++函数?
- 有效地计算像素到其对应核线的距离
- 堆和堆栈之间的距离
- std::使用迭代器映射查找距离,程序不会终止
- OpenLayers距离公式