//计算点到直线的距离
double point2LineDistance(cv::Point2d point, cv::Vec4f lineParam)
{
cv::Point2d qIpoint;
cv::Vec4f lineVert;
lineVert[0] = lineParam[1];
lineVert[1] = -lineParam[0];
lineVert[2] = point.x;
lineVert[3] = point.y;
qIpoint = get2lineIPoint(lineParam, lineVert);
double dx = point.x - qIpoint.x;
double dy = point.y - qIpoint.y;
double fdis = sqrt(dx * dx + dy * dy);
return fdis;
}
//两条直线的交点
cv::Point2d get2lineIPoint(cv::Vec4f lineParam1, cv::Vec4f lineParam2)
{
//Vec4f :参数的前半部分给出的是直线的方向,而后半部分给出的是直线上的一点
cv::Point2d result(-1, -1);
double cos_theta = lineParam1[0];
double sin_theta = lineParam1[1];
double x = lineParam1[2];
double y = lineParam1[3];
double k = sin_theta / cos_theta;
double b = y - k * x;
cos_theta = lineParam2[0];
sin_theta = lineParam2[1];
x = lineParam2[2];
y = lineParam2[3];
double k1 = sin_theta / cos_theta;
double b1 = y - k1 * x;
result.x = (b1 - b) / (k - k1);
result.y = k * x + b;
return result;
}
c++ 求点到直线的距离
最新推荐文章于 2024-05-13 10:00:00 发布