// 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)); }
public static bool TestRelOnLine(CrossStatus begin, CrossStatus end, double t) { if (!testRelBeginPt(begin, t)) { return(false); } if (!testRelEndPt(end, t)) { return(false); } return(true); }
// 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); }
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); }
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)); }
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)); }
public static bool TestRelOnLine(CrossStatus both, double t) { return(TestRelOnLine(both, both, t)); }