Example #1
0
        // vypocita prusecik dvou primek ktere jsou definovane pocatecnim a koncovym bodem
        // vraci true pokud nejsou primky rovnobezne nebo prusecik lezi v definovane oblesti podle eStatus
        public static bool CrossAbs(Point a1, CrossStatus sa1, Point a2, CrossStatus sa2,
                                    Point b1, CrossStatus sb1, Point b2, CrossStatus sb2,
                                    out Point retPt)                                                                                                                                                                                                                                    // vraci absolutni souradnice pruseciku
        {
            Vector da = a2.Minus(a1),
                   db = b2.Minus(b1);

            return(CrossAbs(a1, sa1, da, sa2, b1, sb1, db, sb2, out retPt));
        }
Example #2
0
 public static bool TestRelOnLine(CrossStatus begin, CrossStatus end, double t)
 {
     if (!testRelBeginPt(begin, t))
     {
         return(false);
     }
     if (!testRelEndPt(end, t))
     {
         return(false);
     }
     return(true);
 }
Example #3
0
        // vypocita prusecik dvou primek ktere jsou definovane pocatecnim bodem 'pxx' a usekem 'sxx'
        // vraci true pokud nejsou primky rovnobezne nebo prusecik lezi v definovane oblesti podle eStatus
        // priklad :	primka  - (eStatus.Infinite , eStatus.Infinite}
        //						usecka vcetne pocatecniho bodu a bez koncoveho bodu - (eStatus.And , eStatus.Not}
        public static bool CrossAbs(Point p11, CrossStatus s11, Vector p12, CrossStatus s12,
                                    Point p21, CrossStatus s21, Vector p22, CrossStatus s22,
                                    out Point retPt)                                                                                                                                                                                                                                                                    // vraci absolutni souradnice pruseciku
        {
            retPt = new Point();
            if (!CrossRel(p11, p12, p21, p22, out Point u))
            {
                return(false);
            }

            if (!TestRelOnLine(s11, s12, u.X))
            {
                return(false);
            }
            if (!TestRelOnLine(s21, s22, u.Y))
            {
                return(false);
            }

            retPt.X = p11.X + (u.X * p12.X);
            retPt.Y = p11.Y + (u.X * p12.Y);
            return(true);
        }
Example #4
0
        private static bool testRelEndPt(CrossStatus st, double t)
        {
            switch (st)
            {
            case CrossStatus.Infinite: break;

            case CrossStatus.And: if (!(t < 1 || Funcs2D.IsEqual(t, 1.0, Funcs2D.Epson)))
                {
                    return(false);
                }
                break;

            case CrossStatus.Not: if (Funcs2D.IsEqual(t, 1.0, Funcs2D.Epson))
                {
                    return(false);
                }
                if (!(t < 1))
                {
                    return(false);
                }
                break;
            }
            return(true);
        }
Example #5
0
 public static bool CrossAbs(Point a1, Point a2,
                             Point b1, Point b2,
                             CrossStatus sall, out Point retPt)                                                                                                                                                                                          // vraci absolutni souradnice pruseciku
 {
     return(CrossAbs(a1, sall, a2, sall, b1, sall, b2, sall, out retPt));
 }
Example #6
0
 public static bool CrossAbs(Point p11, Vector p12,
                             Point p21, Vector p22,
                             CrossStatus sall, out Point retPt)                                                                                                                                  // vraci absolutni souradnice pruseciku
 {
     return(CrossAbs(p11, sall, p12, sall, p21, sall, p22, sall, out retPt));
 }
Example #7
0
 public static bool TestRelOnLine(CrossStatus both, double t)
 {
     return(TestRelOnLine(both, both, t));
 }