예제 #1
0
        public static sIntersectPos GetLinesIntersectBetween(XYInt a1, XYInt a2, XYInt b1, XYInt b2)
        {
            var result = new sIntersectPos();

            if ((a1.X == a2.X & a1.Y == a2.Y) || (b1.X == b2.X & b1.Y == b2.Y))
            {
                result.Exists = false;
            }
            else
            {
                double y1dif = 0;
                double x1dif = 0;
                double adifx = 0;
                double adify = 0;
                double bdifx = 0;
                double bdify = 0;
                double m     = 0;
                double ar    = 0;
                double br    = 0;

                y1dif = b1.Y - a1.Y;
                x1dif = b1.X - a1.X;
                adifx = a2.X - a1.X;
                adify = a2.Y - a1.Y;
                bdifx = b2.X - b1.X;
                bdify = b2.Y - b1.Y;
                m     = adifx * bdify - adify * bdifx;
                if (m == 0.0D)
                {
                    result.Exists = false;
                }
                else
                {
                    ar = (x1dif * bdify - y1dif * bdifx) / m;
                    br = (x1dif * adify - y1dif * adifx) / m;
                    if (ar <= 0.0D | ar >= 1.0D | br <= 0.0D | br >= 1.0D)
                    {
                        result.Exists = false;
                    }
                    else
                    {
                        result.Pos.X  = a1.X + (ar * adifx).ToInt();
                        result.Pos.Y  = a1.Y + (ar * adify).ToInt();
                        result.Exists = true;
                    }
                }
            }
            return(result);
        }
예제 #2
0
        public static sIntersectPos GetLinesIntersectBetween(XYInt A1, XYInt A2, XYInt B1, XYInt B2)
        {
            var Result = new sIntersectPos();

            if ( (A1.X == A2.X & A1.Y == A2.Y) || (B1.X == B2.X & B1.Y == B2.Y) )
            {
                Result.Exists = false;
            }
            else
            {
                double y1dif = 0;
                double x1dif = 0;
                double adifx = 0;
                double adify = 0;
                double bdifx = 0;
                double bdify = 0;
                double m = 0;
                double ar = 0;
                double br = 0;

                y1dif = B1.Y - A1.Y;
                x1dif = B1.X - A1.X;
                adifx = A2.X - A1.X;
                adify = A2.Y - A1.Y;
                bdifx = B2.X - B1.X;
                bdify = B2.Y - B1.Y;
                m = adifx * bdify - adify * bdifx;
                if ( m == 0.0D )
                {
                    Result.Exists = false;
                }
                else
                {
                    ar = (x1dif * bdify - y1dif * bdifx) / m;
                    br = (x1dif * adify - y1dif * adifx) / m;
                    if ( ar <= 0.0D | ar >= 1.0D | br <= 0.0D | br >= 1.0D )
                    {
                        Result.Exists = false;
                    }
                    else
                    {
                        Result.Pos.X = A1.X + (int)(ar * adifx);
                        Result.Pos.Y = A1.Y + (int)(ar * adify);
                        Result.Exists = true;
                    }
                }
            }
            return Result;
        }