我知道stackoverflow上有关于给定的两条线的各种帖子,每条线由两个点定义,能够计算交叉点,但通常这些解决方案扩展线条而不是处理它们的物理尺寸。
背景搜索:用于计算由点定义的两条线的交集的典型函数如下所示,但是归功于here.
// Finds the intersection of two lines, or returns false.
// The lines are defined by (o1, p1) and (o2, p2).
bool intersection(Point2f o1, Point2f p1, Point2f o2, Point2f p2,
Point2f &r)
{
Point2f x = o2 - o1;
Point2f d1 = p1 - o1;
Point2f d2 = p2 - o2;
float cross = d1.x*d2.y - d1.y*d2.x;
if (abs(cross) < /*EPS*/1e-8)
return false;
double t1 = (x.x * d2.y - x.y * d2.x)/cross;
r = o1 + d1 * t1;
return true;
}
问题:虽然这段代码很有效,但我想知道是否有人知道如何更改此函数,如果点所定义的行不是物理相交。目前,这些线路最终会延长。
例如:
o1 = 0,0
p1 = 10,0
o2 = 5,5
p2 = 5,-5
当然,这将在5,0
处相交。
例如:
o1 = 0,0
p1 = 10,0
o2 = 5,5
p2 = 5,2
虽然该函数还说这个交集位于5,0
,但是由点定义的线在物理上不相交,所以在这种情况下我希望函数返回false。
我考虑过最后修改此功能,检查r
是否在每一行的两个点之间,并且遇到建议的here.公式。我想知道是否有更好或更简单的解决方案?