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);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值