您的位置:首页 > 其它

平行线判断函数+求平行线之间的距离

2015-03-25 14:11 519 查看
struct LINE
{
CvPoint pt0;
CvPoint pt1;
LINE( CvPoint pta, CvPoint ptb )
{
pt0 = pta;
pt1 = ptb;
}
LINE()
{
pt0.x = pt0.y = 0;
pt1.x = pt1.y = 0;
}
};

// 得到直线的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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐