// Token: 0x060003F1 RID: 1009 RVA: 0x00011BA4 File Offset: 0x0000FDA4 public static Segment2?IntersectionWith(this Segment2 segment, Triangle2 triangle) { IntersectionSegment2Triangle2 intersectionSegment2Triangle = new IntersectionSegment2Triangle2(segment, triangle); bool flag = intersectionSegment2Triangle.Find(); if (flag && intersectionSegment2Triangle.IntersectionType == Intersection.Type.IT_SEGMENT) { return(new Segment2?(new Segment2(intersectionSegment2Triangle.Point0, intersectionSegment2Triangle.Point1))); } if (flag && intersectionSegment2Triangle.IntersectionType == Intersection.Type.IT_POINT) { return(new Segment2?(new Segment2(intersectionSegment2Triangle.Point0, segment.Direction, 0.0))); } return(null); }
// Token: 0x060003F2 RID: 1010 RVA: 0x00011C20 File Offset: 0x0000FE20 public static ICollection <Vector2> IntersectionPointsWith(this Segment2 segment, Triangle2 triangle) { IntersectionSegment2Triangle2 intersectionSegment2Triangle = new IntersectionSegment2Triangle2(segment, triangle); intersectionSegment2Triangle.Find(); List <Vector2> list = new List <Vector2>(); Vector2[] array = new Vector2[] { intersectionSegment2Triangle.Point0, intersectionSegment2Triangle.Point1 }; for (int i = 0; i < intersectionSegment2Triangle.Quantity; i++) { list.Add(array[i]); } return(list); }
// Token: 0x06000469 RID: 1129 RVA: 0x000148E0 File Offset: 0x00012AE0 private bool IntersectsSegment(Plane3 plane, Triangle3 triangle, Vector3 end0, Vector3 end1) { int num = 0; double num2 = Math.Abs(plane.Normal.X); double num3 = Math.Abs(plane.Normal.Y); if (num3 > num2) { num = 1; num2 = num3; } num3 = Math.Abs(plane.Normal.Z); if (num3 > num2) { num = 2; } Triangle2 triangle2; Vector2 end2; Vector2 end3; if (num == 0) { triangle2 = new Triangle2(new Vector2(triangle.V0.Y, triangle.V0.Z), new Vector2(triangle.V1.Y, triangle.V1.Z), new Vector2(triangle.V2.Y, triangle.V2.Z)); end2 = new Vector2(end0.Y, end0.Z); end3 = new Vector2(end1.Y, end1.Z); } else if (num == 1) { triangle2 = new Triangle2(new Vector2(triangle.V0.X, triangle.V0.Z), new Vector2(triangle.V1.X, triangle.V1.Z), new Vector2(triangle.V2.X, triangle.V2.Z)); end2 = new Vector2(end0.X, end0.Z); end3 = new Vector2(end1.X, end1.Z); } else { triangle2 = new Triangle2(new Vector2(triangle.V0.X, triangle.V0.Y), new Vector2(triangle.V1.X, triangle.V1.Y), new Vector2(triangle.V2.X, triangle.V2.Y)); end2 = new Vector2(end0.X, end0.Y); end3 = new Vector2(end1.X, end1.Y); } Segment2 segment = new Segment2(end2, end3); IntersectionSegment2Triangle2 intersectionSegment2Triangle = new IntersectionSegment2Triangle2(segment, triangle2); if (!intersectionSegment2Triangle.Find()) { return(false); } Vector2[] array = new Vector2[2]; if (intersectionSegment2Triangle.IntersectionType == Intersection.Type.IT_SEGMENT) { this.IntersectionType = Intersection.Type.IT_SEGMENT; this.Quantity = 2; array[0] = intersectionSegment2Triangle.Point0; array[1] = intersectionSegment2Triangle.Point1; } else { MathBase.Assert(intersectionSegment2Triangle.IntersectionType == Intersection.Type.IT_POINT, "Triangle3Triangle3.IntersectsSegment(): intersection type is not point"); this.IntersectionType = Intersection.Type.IT_POINT; this.Quantity = 1; array[0] = intersectionSegment2Triangle.Point0; } if (num == 0) { double num4 = 1.0 / plane.Normal.X; for (int i = 0; i < this.Quantity; i++) { this.Points[i].Y = array[i].X; this.Points[i].Z = array[i].Y; this.Points[i].X = num4 * (plane.Constant - plane.Normal.Y * this.Points[i].Y - plane.Normal.Z * this.Points[i].Z); } } else if (num == 1) { double num5 = 1.0 / plane.Normal.Y; for (int i = 0; i < this.Quantity; i++) { this.Points[i].X = array[i].X; this.Points[i].Z = array[i].Y; this.Points[i].Y = num5 * (plane.Constant - plane.Normal.X * this.Points[i].X - plane.Normal.Z * this.Points[i].Z); } } else { double num6 = 1.0 / plane.Normal.Z; for (int i = 0; i < this.Quantity; i++) { this.Points[i].X = array[i].X; this.Points[i].Y = array[i].Y; this.Points[i].Z = num6 * (plane.Constant - plane.Normal.X * this.Points[i].X - plane.Normal.Y * this.Points[i].Y); } } return(true); }