Ejemplo n.º 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);
            }
        }
Ejemplo n.º 2
0
        public static Point ProjectPointOnLineSegment(Point linePoint1, Point linePoint2, Point point)
        {
            Point vector = PointUtil.Minus(linePoint2, linePoint1);

            Point projectedPoint = ProjectPointOnLine(linePoint1, PointUtil.Normalize(vector), point);

            int side = PointOnWhichSideOfLineSegment(linePoint1, linePoint2, projectedPoint);

            //The projected point is on the line segment
            if (side == 0)
            {
                return(projectedPoint);
            }

            if (side == 1)
            {
                return(linePoint1);
            }

            if (side == 2)
            {
                return(linePoint2);
            }

            //output is invalid
            return(Point.Empty);
        }
        public void GenBlock()
        {
            ClearBlock();
            Document a = canvas1.GetCurrent();

            a.GetLinesOfRoom();
            foreach (Line line in a.lines)
            {
                UCWall temp = new UCWall();
                canvas1.Controls.Add(temp);
                Size tSize = new Size(PointUtil.Minus(line.pB, line.pA));
                if (tSize.Width == 0)
                {
                    temp.isVertical = true;
                    temp.Location   = PointUtil.Plus(line.pA, new Point(-2, 2));
                    tSize.Width     = 5;
                    tSize.Height   -= 2;
                }
                else
                {
                    temp.isVertical = false;
                    temp.Location   = PointUtil.Plus(line.pA, new Point(2, -2));
                    tSize.Height    = 5;
                    tSize.Width    -= 2;
                }
                temp.Size = tSize;
                canvas1.Controls.SetChildIndex(temp, 0);

                //Console.WriteLine("draw loc :" + temp.Location + "size : " + temp.Size);
            }
        }
Ejemplo n.º 4
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)));
        }