函数的返回值表示是否有交点
直线的交点由函数的最后一个参数通过引用返回
static bool lineIntersection(const cv::Vec4f& lineA, const cv::Vec4f& lineB, cv::Point2f& p)
{
const float Eps = float(1e-8);
///first line
float x1 = lineA[2];
float y1 = lineA[3];
float x2 = x1 + lineA[0];
float y2 = y1 + lineA[1];
///second line
float x3 = lineB[2];
float y3 = lineB[3];
float x4 = x3 + lineB[0];
float y4 = y3 + lineB[1];
///then find intersection
///denominator
float den = ((x1 - x2) * (y3 - y4)) - ((y1 - y2) * (x3 - x4));
if (fabs(den) <= Eps)
return false;
float d0 = (x1 * y2) - (y1 * x2);
float d1 = (x3 * y4) - (y3 * x4);
float numx = (d0 * (x3 - x4)) - (d1 * (x1 - x2));
float numy = (d0 * (y3 - y4)) - (d1 * (y1 - y2));
p.x = numx / den;
p.y = numy / den;
return true;
}