#include<iostream>
#include<math.h>
using namespace std;
typedef struct POINT{
double x;
double y;
}POINT;
typedef struct Line{
POINT startPoint;
POINT endPoint;
}Line;
//求点到直线的距离 和 垂足
double getDistanceP2L(POINT point ,Line line,POINT &p_point)
{
double x1=line.startPoint.x;
double y1=line.startPoint.y;
double x2=line.endPoint.x;
double y2=line.endPoint.y;
double x0=point.x;
double y0=point.y;
double k=x1==x2?100000:(y2-y1)/(x2-x1);//当x1=x2时,给斜率设一个较大值100000
double a=k;
double b=-1;
double c=y1-k*x1;
//垂足
double px = (b*b*x0-a*b*y0-a*c)/(a*a+b*b);
double py = (a*a*y0-a*b*x0-b*c)/(a*a+b*b);
p_point.x = px;
p_point.y = py;
cout<<"垂足:"<<p_point.x<<" , "<<p_point.y<<endl;
double d=abs(a*x0+b*y0+c)/sqrt(a*a+b*b);
cout<<"距离:"<<d<<endl;
return d;
}
int main()
{
POINT point;
POINT t_point;
point.x =1;
point.y = 1;
Line line;
line.startPoint.x = 0;
line.startPoint.y = 0;
line.endPoint.x = 0;
line.endPoint.y = 1;
getDistanceP2L(point , line , t_point);
return 0;
}
C++点到直线的距离和垂足
最新推荐文章于 2024-12-11 22:49:33 发布