// Token: 0x06000442 RID: 1090 RVA: 0x00013340 File Offset: 0x00011540 public bool Find() { this.Quantity = 3; for (int i = 0; i < 3; i++) { this.Points[i] = this.triangle1[i]; } int index = 2; for (int j = 0; j < 3; j++) { Vector2 rkN = new Vector2(this.triangle0[index].Y - this.triangle0[j].Y, this.triangle0[j].X - this.triangle0[index].X); double fC = rkN.Dot(this.triangle0[index]); int quantity = this.Quantity; Vector2[] points = this.Points; IntersectionTriangle2Triangle2.ClipConvexPolygonAgainstLine(rkN, fC, ref quantity, ref points); this.Points = points; this.Quantity = quantity; if (this.Quantity == 0) { return(false); } index = j; } return(true); }
// Token: 0x06000441 RID: 1089 RVA: 0x000131F0 File Offset: 0x000113F0 public bool Test() { int i = 0; int index = 2; while (i < 3) { Vector2 rkD = new Vector2(this.triangle0[i].Y - this.triangle0[index].Y, this.triangle0[index].X - this.triangle0[i].X); if (IntersectionTriangle2Triangle2.WhichSide(this.triangle1, this.triangle0[index], rkD) > 0) { return(false); } index = i; i++; } i = 0; index = 2; while (i < 3) { Vector2 rkD2 = new Vector2(this.triangle1[i].Y - this.triangle1[index].Y, this.triangle1[index].X - this.triangle1[i].X); if (IntersectionTriangle2Triangle2.WhichSide(this.triangle0, this.triangle1[index], rkD2) > 0) { return(false); } index = i; i++; } return(true); }
// Token: 0x06000435 RID: 1077 RVA: 0x00013128 File Offset: 0x00011328 public static ICollection <Vector2> IntersectionPointsWith(this Triangle2 triangle, Triangle2 other) { IntersectionTriangle2Triangle2 intersectionTriangle2Triangle = new IntersectionTriangle2Triangle2(triangle, other); intersectionTriangle2Triangle.Find(); List <Vector2> list = new List <Vector2>(); for (int i = 0; i < intersectionTriangle2Triangle.Quantity; i++) { list.Add(intersectionTriangle2Triangle.Points[i]); } return(list); }
// Token: 0x06000434 RID: 1076 RVA: 0x00013108 File Offset: 0x00011308 public static bool Intersects(this Triangle2 triangle, Triangle2 other) { IntersectionTriangle2Triangle2 intersectionTriangle2Triangle = new IntersectionTriangle2Triangle2(triangle, other); return(intersectionTriangle2Triangle.Test()); }
// Token: 0x0600046A RID: 1130 RVA: 0x00014E70 File Offset: 0x00013070 private bool GetCoplanarIntersection(Plane3 plane, Triangle3 tri0, Triangle3 tri1) { 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 triangle; Triangle2 triangle2; if (num == 0) { triangle = new Triangle2(new Vector2(tri0.V0.Y, tri0.V0.Z), new Vector2(tri0.V1.Y, tri0.V1.Z), new Vector2(tri0.V2.Y, tri0.V2.Z)); triangle2 = new Triangle2(new Vector2(tri1.V0.Y, tri1.V0.Z), new Vector2(tri1.V1.Y, tri1.V1.Z), new Vector2(tri1.V2.Y, tri1.V2.Z)); } else if (num == 1) { triangle = new Triangle2(new Vector2(tri0.V0.X, tri0.V0.Z), new Vector2(tri0.V1.X, tri0.V1.Z), new Vector2(tri0.V2.X, tri0.V2.Z)); triangle2 = new Triangle2(new Vector2(tri1.V0.X, tri1.V0.Z), new Vector2(tri1.V1.X, tri1.V1.Z), new Vector2(tri1.V2.X, tri1.V2.Z)); } else { triangle = new Triangle2(new Vector2(tri0.V0.X, tri0.V0.Y), new Vector2(tri0.V1.X, tri0.V1.Y), new Vector2(tri0.V2.X, tri0.V2.Y)); triangle2 = new Triangle2(new Vector2(tri1.V0.X, tri1.V0.Y), new Vector2(tri1.V1.X, tri1.V1.Y), new Vector2(tri1.V2.X, tri1.V2.Y)); } Vector2 vector = triangle.V1 - triangle.V0; Vector2 vector2 = triangle.V2 - triangle.V0; if (vector.DotPerpendicular(vector2) < 0.0) { triangle = new Triangle2(triangle.V0, triangle.V2, triangle.V1); } vector = triangle2.V1 - triangle2.V0; vector2 = triangle2.V2 - triangle2.V0; if (vector.DotPerpendicular(vector2) < 0.0) { triangle2 = new Triangle2(triangle2.V0, triangle2.V2, triangle2.V1); } IntersectionTriangle2Triangle2 intersectionTriangle2Triangle = new IntersectionTriangle2Triangle2(triangle, triangle2); if (!intersectionTriangle2Triangle.Find()) { return(false); } this.Quantity = intersectionTriangle2Triangle.Quantity; if (num == 0) { double num4 = 1.0 / plane.Normal.X; for (int i = 0; i < this.Quantity; i++) { this.Points[i].Y = intersectionTriangle2Triangle.Points[i].X; this.Points[i].Z = intersectionTriangle2Triangle.Points[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 = intersectionTriangle2Triangle.Points[i].X; this.Points[i].Z = intersectionTriangle2Triangle.Points[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 = intersectionTriangle2Triangle.Points[i].X; this.Points[i].Y = intersectionTriangle2Triangle.Points[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); }