计算直线上距离某坐标最近的一个投影点

计算直线上距离某坐标最近的一个投影点

0x01 调用方式

        var p = GetProjectivePoint(new Point(0,0), new Point(300,300), new Point(100,150));
        Console.WriteLine(p);

0x02 源码

        /// 
        /// 计算直线上距离某坐标最近的一个投影点
        /// 
        /// 直线的坐标1
        /// 直线的坐标2
        /// 直线外的坐标
        /// 
        protected Point GetProjectivePoint(Point P1, Point P2, Point pOut)
        {
            Point pLine = P1;
            if (P1.X == P2.X && P1.Y == P2.Y)
            {
                return P1;
            }
            if (P1.X == P2.X)
            {
                return new Point(pLine.X, pOut.Y);
            }
            else if (P1.Y == P2.Y) //垂线斜率不存在情况
            {
                return new Point(pOut.X, pLine.Y);
            }
            //计算线的斜率
            Double k = ((Double)(P1.Y - P2.Y)) / (P1.X - P2.X);
            var X = (float)((k * pLine.X + pOut.X / k + pOut.Y - pLine.Y) / (1 / k + k));
            var Y = (float)(-1 / k * (X - pOut.X) + pOut.Y);
            return new Point(X,Y);
        }

你可能感兴趣的:(几何,C#)