部分几何函数

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值