objective-c实现点到直线的距离及与垂足的交点
程序员文章站
2024-02-13 23:30:22
问题描述
点到直线或者线段的距离
实现思路
假设有一点坐标p(x0,y0),有一线段ab,a坐标(x1,y1),b坐标(x2,y2),求p点到ab线段或所在直线的距离...
问题描述
点到直线或者线段的距离
实现思路
假设有一点坐标p(x0,y0),有一线段ab,a坐标(x1,y1),b坐标(x2,y2),求p点到ab线段或所在直线的距离d以及p点在直线上的垂足c(x,y)。
这需要复习一下高中的数学知识。
首先需要将a,b两点坐标转换为直线方程的一般式ax+by+c = 0,过程就不推演了。
参数计算:
a=y2-y1;
b=x1-x2;
c=x2*y1-x1*y2;
1、点到直线的距离公式:
d= ( ax0 + by0 + c ) / sqrt ( a*a + b*b );
2、垂足c(x,y)计算公式:
x = ( b*b*x0 - a*b*y0 - a*c ) / ( a*a + b*b );
y = ( -a*b*x0 + a*a*y0 – b*c ) / ( a*a + b*b );
程序的实现:
//垂足交点 -(cgpoint)pedalpoint: (cgpoint)p1 : (cgpoint )p2: (cgpoint)x0{ float a=p2.y-p1.y; float b=p1.x-p2.x; float c=p2.x*p1.y-p1.x*p2.y; float x=(b*b*x0.x-a*b*x0.y-a*c)/(a*a+b*b); float y=(-a*b*x0.x+a*a*x0.y-b*c)/(a*a+b*b); //点到直线距离 float d=(a*x0.x+b*x0.y+c)/sqrt(a*a+b*b); cgpoint ptcross=ccp(x,y); nslog(@”d======%f”,d); nslog(@”a=======%f,b=======%f,c=======%f”,a,b,c); nslog(@”垂足======x=%f,y=%f”,x,y); return ptcross; }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。