判斷點在直線上,實際上就是判斷點到直線上的垂直距離。點到直線垂直距離為0,則點在線上。當然也可以誤差設置誤差幾個像素。
參考資料並進行修改:http://blog.sina.com.cn/s/blog_5d5c80840101bnhw.html
//判斷點是否在直線上
public static bool GetPointIsInLine(PointF pf, PointF p1, PointF p2, double range)
{
//range 判斷的的誤差,不需要誤差則賦值0
//點在線段首尾兩端之外則return false
double cross = (p2.X - p1.X) * (pf.X - p1.X) + (p2.Y - p1.Y) * (pf.Y - p1.Y);
if (cross <= 0) return false;
double d2 = (p2.X - p1.X) * (p2.X - p1.X) + (p2.Y - p1.Y) * (p2.Y - p1.Y);
if (cross >= d2) return false;
double r = cross / d2;
double px = p1.X + (p2.X - p1.X) * r;
double py = p1.Y + (p2.Y - p1.Y) * r;
//判斷距離是否小於誤差
return Math.Sqrt((pf.X - px) * (pf.X - px) + (py - pf.Y) * (py - pf.Y)) <= range;
}
代碼源碼:http://download.csdn.net/detail/object360/9607980