点是共线的,不是同时的

Points are collinear and not collinear at the same time

本文关键字:      更新时间:2023-10-16

假设我有以下图表-https://www.desmos.com/calculator/eabskyo0hk

我需要执行以下操作:

  1. 确定apex(endpoint1),dest(newvertex)和endpoint1是否是否是共线。

  2. 如果他们不是共线,请找到其相交点。

我写了以下代码来做到这一点-http://coliru.stacked-crooked.com/a/c08cbe113e706a9c

不幸的是,它无法正常工作。它说这些点不是共线,但后来说他们的交叉点是dest(newvertex),因此使第一个陈述无效。

我想这一定是由于与浮点相关的问题造成的,但我想知道如何通过更改坐标来修复它?

预先感谢。

您的坐标值的幅度很大,因此与std::numeric_limits<T>::epsilon()的跨产品幅度进行比较给出了错误的结果。

编辑:std::numeric_limits<T>::epsilon()不适合作为"这里的小价值"。

您可以尝试将"小价值"相应地扩展到坐标。示例:

my_eps = 1.0E-9;
eps =  my_eps * Max(abs(x1), abs(y1)....

请注意,两个大值的微小差异已经包含很大的相对错误,因此下一个方法是错误的:

eps = my_eps * Max(abs(y1 - y2), abs(x1 - x3), abs(y1 - y3), abs(x1 - x2)); 

所描述的方法应改善结果,但不会提供"银弹" - 有一些特殊的计算方法用于可靠,容易出错的相交计算(问题是全局)。示例 - 方向测试

相关文章:
  • 没有找到相关文章