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

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值