原理:先求点到直线的距离是否符合要求,在判断点是否在某个范围内
trackPt是一个vector存点使用
//判断点是否在线中并返回第几个点 pt点;m范围
int Track::MouseDown(EvFloatPt2D pt, double m)
{
/*点到直线距离(两点式);->改成点到线段的距离
*/
double A ,B ,C, dis;
for(int i = 1; i<trackPt.size();i++)
{
A = (trackPt[i-1].y-trackPt[i].y);
B = (trackPt[i].x-trackPt[i-1].x);
C = trackPt[i-1].x*(trackPt[i].y-trackPt[i-1].y)-trackPt[i-1].y*(trackPt[i].x-trackPt[i-1].x);
dis = fabs(A*pt.x+B*pt.y+C);
dis = dis / (sqrt(A*A+B*B));
if(m>dis)
{
if(trackPt[i].y<trackPt[i-1].y)
{
if(pt.y>=(trackPt[i].y-m)&&pt.y<=(trackPt[i-1].y+m))
{
if(trackPt[i].x<trackPt[i-1].x)
{
if(pt.x>=(trackPt[i].x-m)&&pt.x<=(trackPt[i-1].x+m))
{
return i-1;
}
}
else
{
if(pt.x>=(trackPt[i-1].x-m)&&pt.x<=(trackPt[i].x+m))
{