public static bool GetIntersectionParameters( Segment2LR a, Segment2LR b, out LongRational[] pArray, out LongRational[] qArray) { Vector2LR delta1 = a.GetDelta(); Vector2LR delta2 = b.GetDelta(); LongRational longRational1 = delta1.X * delta2.Y - delta1.Y * delta2.X; if (longRational1.IsZero) { Segment2LR.Struct9 struct9_1 = new Segment2LR.Struct9(a.start, a.end, delta1); Segment2LR.Struct9 struct9_2 = new Segment2LR.Struct9(b.start, b.end, delta2); if ((struct9_1.longRational_0 > struct9_2.longRational_0 ? (!struct9_1.method_0(b.start) ? 0 : (struct9_1.method_0(b.End) ? 1 : 0)) : (struct9_2.longRational_0.IsZero || !struct9_2.method_0(a.start) ? 0 : (struct9_2.method_0(a.end) ? 1 : 0))) != 0) { if (struct9_1.method_1(b.start)) { if (struct9_1.method_1(b.end)) { pArray = new LongRational[2] { a.GetNormalizedProjection(b.start), a.GetNormalizedProjection(b.end) }; qArray = new LongRational[2] { LongRational.Zero, LongRational.One }; return(true); } if (struct9_2.method_1(a.start)) { pArray = new LongRational[2] { LongRational.Zero, a.GetNormalizedProjection(b.start) }; qArray = new LongRational[2] { b.GetNormalizedProjection(a.start), LongRational.Zero }; return(true); } if (struct9_2.method_1(a.End)) { pArray = new LongRational[2] { a.GetNormalizedProjection(b.start), LongRational.One }; qArray = new LongRational[2] { LongRational.Zero, b.GetNormalizedProjection(a.end) }; return(true); } } else if (struct9_1.method_1(b.end)) { if (struct9_2.method_1(a.start)) { if (struct9_2.method_1(a.End)) { pArray = new LongRational[2] { LongRational.Zero, LongRational.One }; qArray = new LongRational[2] { b.GetNormalizedProjection(a.start), b.GetNormalizedProjection(a.end) }; } else { pArray = new LongRational[2] { LongRational.Zero, a.GetNormalizedProjection(b.end) }; qArray = new LongRational[2] { b.GetNormalizedProjection(a.start), LongRational.One }; } return(true); } if (struct9_2.method_1(a.End)) { pArray = new LongRational[2] { LongRational.One, a.GetNormalizedProjection(b.end) }; qArray = new LongRational[2] { b.GetNormalizedProjection(a.end), LongRational.One }; return(true); } } else if (struct9_2.method_1(a.start)) { pArray = new LongRational[2] { LongRational.Zero, LongRational.One }; qArray = new LongRational[2] { b.GetNormalizedProjection(a.start), b.GetNormalizedProjection(a.end) }; return(true); } } pArray = (LongRational[])null; qArray = (LongRational[])null; return(false); } LongRational longRational2 = (b.Start.X - a.Start.X) * delta2.Y - (b.Start.Y - a.Start.Y) * delta2.X; if (longRational1.IsPositive) { if (longRational2.IsNegative || longRational2 > longRational1) { pArray = (LongRational[])null; qArray = (LongRational[])null; return(false); } } else if (longRational2.IsPositive || longRational2 < longRational1) { pArray = (LongRational[])null; qArray = (LongRational[])null; return(false); } LongRational longRational3 = (b.Start.X - a.Start.X) * delta1.Y - (b.Start.Y - a.Start.Y) * delta1.X; if (longRational1.IsPositive) { if (longRational3.IsNegative || longRational3 > longRational1) { pArray = (LongRational[])null; qArray = (LongRational[])null; return(false); } } else if (longRational3.IsPositive || longRational3 < longRational1) { pArray = (LongRational[])null; qArray = (LongRational[])null; return(false); } LongRational longRational4 = longRational2 / longRational1; LongRational longRational5 = longRational3 / longRational1; pArray = new LongRational[1] { longRational4 }; qArray = new LongRational[1] { longRational5 }; return(true); }
public static bool Intersects(Segment2LR a, Segment2LR b) { Vector2LR delta1 = a.GetDelta(); Vector2LR delta2 = b.GetDelta(); LongRational longRational1 = delta1.X * delta2.Y - delta1.Y * delta2.X; if (longRational1.IsZero) { Segment2LR.Struct9 struct9_1 = new Segment2LR.Struct9(a.start, a.end, delta1); Segment2LR.Struct9 struct9_2 = new Segment2LR.Struct9(b.start, b.end, delta2); if ((struct9_1.longRational_0 > struct9_2.longRational_0 ? (!struct9_1.method_0(b.start) ? 0 : (struct9_1.method_0(b.End) ? 1 : 0)) : (struct9_2.longRational_0.IsZero || !struct9_2.method_0(a.start) ? 0 : (struct9_2.method_0(a.end) ? 1 : 0))) != 0) { if (struct9_1.method_1(b.start)) { if (struct9_1.method_1(b.end) || struct9_2.method_1(a.start) || struct9_2.method_1(a.End)) { return(true); } } else if (struct9_1.method_1(b.end)) { if (struct9_2.method_1(a.start) || struct9_2.method_1(a.End)) { return(true); } } else if (struct9_2.method_1(a.start)) { return(true); } } return(false); } LongRational longRational2 = (b.Start.X - a.Start.X) * delta2.Y - (b.Start.Y - a.Start.Y) * delta2.X; if (longRational1.IsPositive) { if (longRational2.IsNegative || longRational2 > longRational1) { return(false); } } else if (longRational2.IsPositive || longRational2 < longRational1) { return(false); } LongRational longRational3 = (b.Start.X - a.Start.X) * delta1.Y - (b.Start.Y - a.Start.Y) * delta1.X; if (longRational1.IsPositive) { if (longRational3.IsNegative || longRational3 > longRational1) { return(false); } } else if (longRational3.IsPositive || longRational3 < longRational1) { return(false); } return(true); }