Int128Mul() public static méthode

public static Int128Mul ( System.Int64 lhs, System.Int64 rhs ) : Int128
lhs System.Int64
rhs System.Int64
Résultat Int128
 internal static bool SlopesEqual(TEdge e1, TEdge e2, bool UseFullRange)
 {
     if (UseFullRange)
     {
         return(Int128.Int128Mul(e1.Delta.Y, e2.Delta.X) == Int128.Int128Mul(e1.Delta.X, e2.Delta.Y));
     }
     return(e1.Delta.Y * e2.Delta.X == e1.Delta.X * e2.Delta.Y);
 }
 protected static bool SlopesEqual(IntPoint pt1, IntPoint pt2, IntPoint pt3, IntPoint pt4, bool UseFullRange)
 {
     if (UseFullRange)
     {
         return(Int128.Int128Mul(pt1.Y - pt2.Y, pt3.X - pt4.X) == Int128.Int128Mul(pt1.X - pt2.X, pt3.Y - pt4.Y));
     }
     return((pt1.Y - pt2.Y) * (pt3.X - pt4.X) - (pt1.X - pt2.X) * (pt3.Y - pt4.Y) == 0);
 }
Exemple #3
0
        //------------------------------------------------------------------------------

        internal static bool SlopesEqual(TEdge e1, TEdge e2, bool UseFullRange)
        {
            if (UseFullRange)
            {
                return(Int128.Int128Mul(e1.Delta.Y, e2.Delta.X) ==
                       Int128.Int128Mul(e1.Delta.X, e2.Delta.Y));
            }
            else
            {
                return((int)(e1.Delta.Y) * (e2.Delta.X) ==
                       (int)(e1.Delta.X) * (e2.Delta.Y));
            }
        }
Exemple #4
0
        //------------------------------------------------------------------------------

        internal static bool SlopesEqual(IntPoint pt1, IntPoint pt2,
                                         IntPoint pt3, IntPoint pt4, bool UseFullRange)
        {
            if (UseFullRange)
            {
                return(Int128.Int128Mul(pt1.Y - pt2.Y, pt3.X - pt4.X) ==
                       Int128.Int128Mul(pt1.X - pt2.X, pt3.Y - pt4.Y));
            }
            else
            {
                return
                    ((int)(pt1.Y - pt2.Y) * (pt3.X - pt4.X) - (int)(pt1.X - pt2.X) * (pt3.Y - pt4.Y) == 0);
            }
        }
Exemple #5
0
        //------------------------------------------------------------------------------

        internal bool PointOnLineSegment(IntPoint pt,
                                         IntPoint linePt1, IntPoint linePt2, bool UseFullRange)
        {
            if (UseFullRange)
            {
                return(((pt.X == linePt1.X) && (pt.Y == linePt1.Y)) ||
                       ((pt.X == linePt2.X) && (pt.Y == linePt2.Y)) ||
                       (((pt.X > linePt1.X) == (pt.X < linePt2.X)) &&
                        ((pt.Y > linePt1.Y) == (pt.Y < linePt2.Y)) &&
                        ((Int128.Int128Mul((pt.X - linePt1.X), (linePt2.Y - linePt1.Y)) ==
                          Int128.Int128Mul((linePt2.X - linePt1.X), (pt.Y - linePt1.Y))))));
            }
            else
            {
                return(((pt.X == linePt1.X) && (pt.Y == linePt1.Y)) ||
                       ((pt.X == linePt2.X) && (pt.Y == linePt2.Y)) ||
                       (((pt.X > linePt1.X) == (pt.X < linePt2.X)) &&
                        ((pt.Y > linePt1.Y) == (pt.Y < linePt2.Y)) &&
                        ((pt.X - linePt1.X) * (linePt2.Y - linePt1.Y) ==
                         (linePt2.X - linePt1.X) * (pt.Y - linePt1.Y))));
            }
        }
Exemple #6
0
        //------------------------------------------------------------------------------

        internal bool PointInPolygon(IntPoint pt, OutPt pp, bool UseFulllongRange)
        {
            OutPt pp2    = pp;
            bool  result = false;

            if (UseFulllongRange)
            {
                do
                {
                    if ((((pp2.Pt.Y <= pt.Y) && (pt.Y < pp2.Prev.Pt.Y)) ||
                         ((pp2.Prev.Pt.Y <= pt.Y) && (pt.Y < pp2.Pt.Y))) &&
                        new Int128(pt.X - pp2.Pt.X) <
                        Int128.Int128Mul(pp2.Prev.Pt.X - pp2.Pt.X, pt.Y - pp2.Pt.Y) /
                        new Int128(pp2.Prev.Pt.Y - pp2.Pt.Y))
                    {
                        result = !result;
                    }
                    pp2 = pp2.Next;
                } while (pp2 != pp);
            }
            else
            {
                do
                {
                    if ((((pp2.Pt.Y <= pt.Y) && (pt.Y < pp2.Prev.Pt.Y)) ||
                         ((pp2.Prev.Pt.Y <= pt.Y) && (pt.Y < pp2.Pt.Y))) &&
                        (pt.X - pp2.Pt.X < (pp2.Prev.Pt.X - pp2.Pt.X) * (pt.Y - pp2.Pt.Y) /
                         (pp2.Prev.Pt.Y - pp2.Pt.Y)))
                    {
                        result = !result;
                    }
                    pp2 = pp2.Next;
                } while (pp2 != pp);
            }

            return(result);
        }
 internal bool PointOnLineSegment(IntPoint pt, IntPoint linePt1, IntPoint linePt2, bool UseFullRange)
 {
     if (UseFullRange)
     {
         if ((pt.X != linePt1.X || pt.Y != linePt1.Y) && (pt.X != linePt2.X || pt.Y != linePt2.Y))
         {
             if (pt.X > linePt1.X == pt.X < linePt2.X && pt.Y > linePt1.Y == pt.Y < linePt2.Y)
             {
                 return(Int128.Int128Mul(pt.X - linePt1.X, linePt2.Y - linePt1.Y) == Int128.Int128Mul(linePt2.X - linePt1.X, pt.Y - linePt1.Y));
             }
             return(false);
         }
         return(true);
     }
     if ((pt.X != linePt1.X || pt.Y != linePt1.Y) && (pt.X != linePt2.X || pt.Y != linePt2.Y))
     {
         if (pt.X > linePt1.X == pt.X < linePt2.X && pt.Y > linePt1.Y == pt.Y < linePt2.Y)
         {
             return((pt.X - linePt1.X) * (linePt2.Y - linePt1.Y) == (linePt2.X - linePt1.X) * (pt.Y - linePt1.Y));
         }
         return(false);
     }
     return(true);
 }
 internal bool PointOnLineSegment(IntPoint pt, IntPoint linePt1, IntPoint linePt2, bool UseFullRange)
 {
     if (UseFullRange)
     {
         return((pt.X == linePt1.X && pt.Y == linePt1.Y) || (pt.X == linePt2.X && pt.Y == linePt2.Y) || (pt.X > linePt1.X == pt.X < linePt2.X && pt.Y > linePt1.Y == pt.Y < linePt2.Y && Int128.Int128Mul(pt.X - linePt1.X, linePt2.Y - linePt1.Y) == Int128.Int128Mul(linePt2.X - linePt1.X, pt.Y - linePt1.Y)));
     }
     return((pt.X == linePt1.X && pt.Y == linePt1.Y) || (pt.X == linePt2.X && pt.Y == linePt2.Y) || (pt.X > linePt1.X == pt.X < linePt2.X && pt.Y > linePt1.Y == pt.Y < linePt2.Y && (pt.X - linePt1.X) * (linePt2.Y - linePt1.Y) == (linePt2.X - linePt1.X) * (pt.Y - linePt1.Y)));
 }