// Token: 0x0600043C RID: 1084 RVA: 0x000131A8 File Offset: 0x000113A8 public IntersectionTriangle2Triangle2(Triangle2 triangle0, Triangle2 triangle1) { this = default(IntersectionTriangle2Triangle2); this.Points = new Vector2[6]; this.triangle0 = triangle0; this.triangle1 = triangle1; }
// Token: 0x0600006C RID: 108 RVA: 0x0000342C File Offset: 0x0000162C public DistanceVector2Triangle2(Vector2 vector, Triangle2 triangle) { this = default(DistanceVector2Triangle2); DistanceVector3Triangle3 distanceVector3Triangle = new DistanceVector3Triangle3(new Vector3(vector.X, vector.Y, 0.0), new Triangle3(new Vector3(triangle.V0.X, triangle.V0.Y, 0.0), new Vector3(triangle.V1.X, triangle.V1.Y, 0.0), new Vector3(triangle.V2.X, triangle.V2.Y, 0.0))); this.SquaredDistance = distanceVector3Triangle.SquaredDistance; this.ClosestPointOnVector = vector; this.ClosestPointOnTriangle = new Vector2(distanceVector3Triangle.ClosestPointOnTriangle.X, distanceVector3Triangle.ClosestPointOnTriangle.Y); }
// Token: 0x0600048A RID: 1162 RVA: 0x00016A2C File Offset: 0x00014C2C public static AxisAlignedBox2 ComputeAxisAlignedBoundingBox(this Triangle2 triangle) { double minX = Math.Min(triangle.V0.X, Math.Min(triangle.V1.X, triangle.V2.X)); double minY = Math.Min(triangle.V0.Y, Math.Min(triangle.V1.Y, triangle.V2.Y)); double maxX = Math.Max(triangle.V0.X, Math.Max(triangle.V1.X, triangle.V2.X)); double maxY = Math.Max(triangle.V0.Y, Math.Max(triangle.V1.Y, triangle.V2.Y)); return(new AxisAlignedBox2(minX, maxX, minY, maxY)); }
// Token: 0x06000360 RID: 864 RVA: 0x0000E774 File Offset: 0x0000C974 internal static void GetInterval(Vector2 origin, UnitVector2 direction, Triangle2 triangle, double[] dist, int[] sign, ref double[] param) { double[] array = new double[3]; for (int i = 0; i < 3; i++) { Vector2 vector = triangle[i] - origin; array[i] = direction.Dot(vector); } int num = 0; int num2 = 2; int j = 0; while (j < 3) { if (sign[num2] * sign[j] < 0) { MathBase.Assert(num < 2, "Line2Triangle2.GetInterval(): iQuantity < 2 failed"); double num3 = dist[num2] * array[j] - dist[j] * array[num2]; double num4 = dist[num2] - dist[j]; param[num++] = num3 / num4; } num2 = j++; } if (num < 2) { int k = 0; while (k < 3) { if (sign[k] == 0) { MathBase.Assert(num < 2, "Line2Triangle2.GetInterval(): iQuantity < 2 failed"); param[num++] = array[k]; } int num5 = k++; } } MathBase.Assert(num >= 1, "Line2Triangle2.GetInterval(): iQuantity >= 1 failed"); if (num == 2) { if (param[0] > param[1]) { double num6 = param[0]; param[0] = param[1]; param[1] = num6; return; } } else { param[1] = param[0]; } }
// 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); }
/// <summary> /// 线和三角形相交 /// </summary> /// <param name="line"></param> /// <param name="triangle"></param> /// <returns></returns> public static Segment2?IntersectionWith(this Line2 line, Triangle2 triangle) { IntersectionLine2Triangle2 intersectionLine2Triangle = new IntersectionLine2Triangle2(line, triangle); bool flag = intersectionLine2Triangle.Find(); if (flag && intersectionLine2Triangle.IntersectionType == Intersection.Type.IT_SEGMENT) { return(new Segment2?(new Segment2(intersectionLine2Triangle.Point0, intersectionLine2Triangle.Point1))); } if (flag && intersectionLine2Triangle.IntersectionType == Intersection.Type.IT_POINT) { return(new Segment2?(new Segment2(intersectionLine2Triangle.Point0, line.Direction, 0.0))); } return(null); }
/// <summary> /// /// </summary> /// <param name="line"></param> /// <param name="triangle"></param> /// <returns></returns> public static ICollection <Vector2> IntersectionPointsWith(this Line2 line, Triangle2 triangle) { IntersectionLine2Triangle2 intersectionLine2Triangle = new IntersectionLine2Triangle2(line, triangle); intersectionLine2Triangle.Find(); List <Vector2> list = new List <Vector2>(); Vector2[] array = new Vector2[] { intersectionLine2Triangle.Point0, intersectionLine2Triangle.Point1 }; for (int i = 0; i < intersectionLine2Triangle.Quantity; i++) { list.Add(array[i]); } return(list); }
// Token: 0x06000443 RID: 1091 RVA: 0x0001344C File Offset: 0x0001164C private static int WhichSide(Triangle2 akV, Vector2 rkP, Vector2 rkD) { int num = 0; int num2 = 0; int num3 = 0; for (int i = 0; i < 3; i++) { double num4 = rkD.Dot(akV[i] - rkP); if (num4 > 0.0) { num++; } else if (num4 < 0.0) { num2++; } else { num3++; } if (num > 0 && num2 > 0) { return(0); } } if (num3 != 0) { return(0); } if (num <= 0) { return(-1); } return(1); }
// Token: 0x0600001E RID: 30 RVA: 0x000025D4 File Offset: 0x000007D4 public static Segment2 ShortestSegmentTo(this Vector2 vector, Triangle2 triangle) { DistanceVector2Triangle2 distanceVector2Triangle = new DistanceVector2Triangle2(vector, triangle); return(new Segment2(distanceVector2Triangle.ClosestPointOnVector, distanceVector2Triangle.ClosestPointOnTriangle)); }
// Token: 0x060004BA RID: 1210 RVA: 0x0001844E File Offset: 0x0001664E public static Triangle2 Transform(this AffineTransform2 transformer, Triangle2 input) { return(new Triangle2(transformer.Transform(input.V0), transformer.Transform(input.V1), transformer.Transform(input.V2))); }
// 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: 0x0600001D RID: 29 RVA: 0x000025B4 File Offset: 0x000007B4 public static double DistanceTo(this Vector2 vector, Triangle2 triangle) { DistanceVector2Triangle2 distanceVector2Triangle = new DistanceVector2Triangle2(vector, triangle); return(distanceVector2Triangle.Distance); }
// Token: 0x0600043A RID: 1082 RVA: 0x00013196 File Offset: 0x00011396 public static Segment2?IntersectionWith(this Triangle2 triangle, Segment2 segment) { return(segment.IntersectionWith(triangle)); }
// Token: 0x0600043B RID: 1083 RVA: 0x0001319F File Offset: 0x0001139F public static ICollection <Vector2> IntersectionPointsWith(this Triangle2 triangle, Segment2 segment) { return(segment.IntersectionPointsWith(triangle)); }
// Token: 0x06000438 RID: 1080 RVA: 0x00013184 File Offset: 0x00011384 public static ICollection <Vector2> IntersectionPointsWith(this Triangle2 triangle, Line2 line) { return(line.IntersectionPointsWith(triangle)); }
// Token: 0x0600035F RID: 863 RVA: 0x0000E6D8 File Offset: 0x0000C8D8 internal static void TriangleLineRelations(Vector2 origin, UnitVector2 direction, Triangle2 triangle, ref double[] dist, ref int[] sign, out int positive, out int negative, out int zero) { positive = 0; negative = 0; zero = 0; for (int i = 0; i < 3; i++) { Vector2 vector = triangle[i] - origin; dist[i] = vector.DotPerpendicular((Vector2)direction); if (dist[i] > 1E-08) { sign[i] = 1; positive++; } else if (dist[i] < -1E-08) { sign[i] = -1; negative++; } else { dist[i] = 0.0; sign[i] = 0; zero++; } } }
// 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); }
// Token: 0x06000437 RID: 1079 RVA: 0x0001317B File Offset: 0x0001137B public static Segment2?IntersectionWith(this Triangle2 triangle, Line2 line) { return(line.IntersectionWith(triangle)); }
public static bool Intersects(this Line2 line, Triangle2 triangle) { IntersectionLine2Triangle2 intersectionLine2Triangle = new IntersectionLine2Triangle2(line, triangle); return(intersectionLine2Triangle.Test()); }
// Token: 0x06000354 RID: 852 RVA: 0x0000E3D1 File Offset: 0x0000C5D1 public IntersectionLine2Triangle2(Line2 line, Triangle2 triangle) { this = default(IntersectionLine2Triangle2); this.line = line; this.triangle = triangle; }
// Token: 0x06000014 RID: 20 RVA: 0x000024A0 File Offset: 0x000006A0 public static Vector2 ClosestPointTo(this Triangle2 triangle, Vector2 vector) { DistanceVector2Triangle2 distanceVector2Triangle = new DistanceVector2Triangle2(vector, triangle); return(distanceVector2Triangle.ClosestPointOnTriangle); }
// 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); }
// Token: 0x06000439 RID: 1081 RVA: 0x0001318D File Offset: 0x0001138D public static bool Intersects(this Triangle2 triangle, Segment2 segment) { return(segment.Intersects(triangle)); }
// Token: 0x06000436 RID: 1078 RVA: 0x00013172 File Offset: 0x00011372 public static bool Intersects(this Triangle2 triangle, Line2 line) { return(line.Intersects(triangle)); }
// Token: 0x06000013 RID: 19 RVA: 0x00002497 File Offset: 0x00000697 public static double DistanceTo(this Triangle2 triangle, Vector2 vector) { return(vector.DistanceTo(triangle)); }
// Token: 0x060003FE RID: 1022 RVA: 0x00011F4B File Offset: 0x0001014B public IntersectionSegment2Triangle2(Segment2 segment, Triangle2 triangle) { this = default(IntersectionSegment2Triangle2); this.segment = segment; this.triangle = triangle; }
// Token: 0x060003F0 RID: 1008 RVA: 0x00011B84 File Offset: 0x0000FD84 public static bool Intersects(this Segment2 segment, Triangle2 triangle) { IntersectionSegment2Triangle2 intersectionSegment2Triangle = new IntersectionSegment2Triangle2(segment, triangle); return(intersectionSegment2Triangle.Test()); }