Пример #1
0
        public static int PointOnWhichSideOfLineSegment(Point linePoint1, Point linePoint2, Point point)
        {
            Point lineVec  = PointUtil.Minus(linePoint2, linePoint1);
            Point pointVec = PointUtil.Minus(point, linePoint1);

            float dot = PointUtil.Dot(pointVec, lineVec);

            //point is on side of linePoint2, compared to linePoint1
            if (dot > 0)
            {
                //point is on the line segment
                if (PointUtil.Magnitude(pointVec) <= PointUtil.Magnitude(lineVec))
                {
                    return(0);
                }

                //point is not on the line segment and it is on the side of linePoint2
                else
                {
                    return(2);
                }
            }

            //Point is not on side of linePoint2, compared to linePoint1.
            //Point is not on the line segment and it is on the side of linePoint1.
            else
            {
                return(1);
            }
        }
Пример #2
0
        public static Point ProjectPointOnLine(Point linePoint, Point lineVec, Point point)
        {
            //get vector from point on line to point in space
            Point linePointToPoint = PointUtil.Minus(point, linePoint);

            int t = PointUtil.Dot(linePointToPoint, lineVec);

            return(PointUtil.Plus(linePoint, new Point(lineVec.X * t, lineVec.Y * t)));
        }