两条线之间的交点由点定义而没有延伸线

时间:2014-09-15 16:22:53

标签: opencv intersection lines

我知道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.公式。我想知道是否有更好或更简单的解决方案?

0 个答案:

没有答案