p点到(a,b)点两所在直线的垂点坐标及p点是否在(a,b)两点所在直线上

 /// <summary>
        
///  p点到(a,b)点两所在直线的垂点坐标
        
/// </summary>
        
/// <param name="a">直线上a点</param>
        
/// <param name="b">直线上b点</param>
        
/// <param name="p"></param>
        
/// <returns>垂点坐标</returns>
        public static Vector2D GetVerticalPosition(Vector2D a, Vector2D b, Vector2D p)
        {
            double fa = b.Y - a.Y;
            double fb = a.X - b.X;
            double fc = a.Y * b.X - a.X * b.Y;

            Vector2D vpt = new Vector2D();//垂足
            vpt.X = (fb * fb * p.X - fa * fb * p.Y - fa * fc) / (fa * fa + fb * fb);
            vpt.Y = (fa * fa * p.Y - fa * fb * p.X - fb * fc) / (fa * fa + fb * fb);

            return vpt;
        }
        /// <summary>
        
/// p点是否在(a,b)两点所在直线上
        
/// </summary>
        
/// <param name="a"></param>
        
/// <param name="b"></param>
        
/// <param name="foot"></param>
        
/// <returns></returns>
        public static bool DotIsOnLine(Vector2D a, Vector2D b, Vector2D foot)
        {
            return Math.Min(a.X, b.X) <= foot.X && foot.X <= Math.Max(a.X, b.X) && Math.Min(a.Y, b.Y) <= foot.Y && foot.Y <= Math.Max(a.Y, b.Y);
        }
posted @ 2015-07-17 14:06  94cool  阅读(243)  评论(0)    收藏  举报