#include<iostream>
#include<vector>
#include<math.h>
#include<algorithm>
using namespace std;
double fDotToDot(int Startx,int Starty,int Endx,int Endy) //点到点
{
double dTemp=(Startx-Endx)*(Startx-Endx)+(Starty-Endy)*(Starty-Endy);
return sqrt(dTemp);
}
double fDotToLine(int x,int y,int Startx,int Starty,int Endx,int Endy) //点到直线
{
double A=Starty-Endy;
double B=Endx-Startx;
double C=Startx*Endy-Endx*Starty;
double dUp=fabs(A*x+B*y+C);
double dDown=sqrt(A*A+B*B);
return dUp/dDown;
}
double fDotToSegment(int x,int y,int Startx,int Starty,int Endx,int Endy) //点到线段
{
vector<double>vec;
vec.push_back(fDotToLine(x,y,Startx,Starty,Endx,Endy));
vec.push_back(fDotToDot(x,y,Startx,Starty));
vec.push_back(fDotToDot(x,y,Endx,Endy));
sort(vec.begin(),vec.end());
return vec[0];
}
bool bIsOn(int x,int y,int Startx,int Starty,int Endx,int Endy) //点是否在线段上
{
double A=Starty-Endy;
double B=Endx-Startx;
double C=Startx*Endy-Endx*Starty;
double dX=(x-Startx)*(x-Endx);
double dY=(y-Starty)*(y-Endy);
if(dX<=0&&dY<=0&&A*x+B*y+C==0)
return true;
else
return false;
}