// 得到直线的tan斜率
double GetTanOfLine( LINE line )
{
double x_dis = line.pt0.x - line.pt1.x;
if ( x_dis == 0.0 ) return 10e9;
return (line.pt0.y - line.pt1.y) / x_dis;
}
// 得到两条平行线之间的距离
double GetDisOfParallelLines( LINE line0, LINE line1 )
{
CvPoint midPoint = cvPoint( (line0.pt0.x + line0.pt1.x)/2, (line0.pt0.y + line0.pt1.y)/2 ); // 中点
double x_dis = line1.pt0.x - line1.pt1.x;
if ( x_dis == 0.0 ) return fabs((double)(midPoint.x - line0.pt0.x)); // 如果line1 垂直x轴
double a = (line1.pt0.y - line1.pt1.y) / x_dis;
double b = line1.pt0.y - (line1.pt0.x * a);
return fabs(a * midPoint.x - midPoint.y + b) / sqrt(a * a + 1);
}
// 判断两直线是否平行
bool IsParallelLines( LINE line0, LINE line1 )
{
#define LIMIT (1.1547 / 3) //近似平行线的斜率之差的范围
double angleTan0 = GetTanOfLine( line0 );
double angleTan1 = GetTanOfLine( line1 );
if ( fabs(angleTan0 - angleTan1) < (double)LIMIT )
{
return 1;
}
return 0;
}原文:http://blog.csdn.net/u011504498/article/details/44621047