点是共线的,不是同时的
Points are collinear and not collinear at the same time
假设我有以下图表-https://www.desmos.com/calculator/eabskyo0hk
我需要执行以下操作:
-
确定apex(endpoint1),dest(newvertex)和endpoint1是否是否是共线。
-
如果他们不是共线,请找到其相交点。
我写了以下代码来做到这一点-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));
所描述的方法应改善结果,但不会提供"银弹" - 有一些特殊的计算方法用于可靠,容易出错的相交计算(问题是全局)。示例 - 方向测试
相关文章:
- 没有找到相关文章