// 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;
 }
Ejemplo n.º 2
0
        // 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);
        }
Ejemplo n.º 3
0
        // 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));
        }
Ejemplo n.º 4
0
        // 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];
            }
        }
Ejemplo n.º 5
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);
        }
Ejemplo n.º 6
0
        /// <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);
        }
Ejemplo n.º 7
0
        /// <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);
        }
Ejemplo n.º 9
0
        // 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));
        }
Ejemplo n.º 10
0
 // 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)));
 }
Ejemplo n.º 11
0
        // 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());
        }
Ejemplo n.º 12
0
        // 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);
        }
Ejemplo n.º 13
0
 // Token: 0x0600043A RID: 1082 RVA: 0x00013196 File Offset: 0x00011396
 public static Segment2?IntersectionWith(this Triangle2 triangle, Segment2 segment)
 {
     return(segment.IntersectionWith(triangle));
 }
Ejemplo n.º 14
0
 // Token: 0x0600043B RID: 1083 RVA: 0x0001319F File Offset: 0x0001139F
 public static ICollection <Vector2> IntersectionPointsWith(this Triangle2 triangle, Segment2 segment)
 {
     return(segment.IntersectionPointsWith(triangle));
 }
Ejemplo n.º 15
0
 // Token: 0x06000438 RID: 1080 RVA: 0x00013184 File Offset: 0x00011384
 public static ICollection <Vector2> IntersectionPointsWith(this Triangle2 triangle, Line2 line)
 {
     return(line.IntersectionPointsWith(triangle));
 }
Ejemplo n.º 16
0
 // 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++;
         }
     }
 }
Ejemplo n.º 17
0
        // 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);
        }
Ejemplo n.º 18
0
 // Token: 0x06000437 RID: 1079 RVA: 0x0001317B File Offset: 0x0001137B
 public static Segment2?IntersectionWith(this Triangle2 triangle, Line2 line)
 {
     return(line.IntersectionWith(triangle));
 }
Ejemplo n.º 19
0
        public static bool Intersects(this Line2 line, Triangle2 triangle)
        {
            IntersectionLine2Triangle2 intersectionLine2Triangle = new IntersectionLine2Triangle2(line, triangle);

            return(intersectionLine2Triangle.Test());
        }
Ejemplo n.º 20
0
 // Token: 0x06000354 RID: 852 RVA: 0x0000E3D1 File Offset: 0x0000C5D1
 public IntersectionLine2Triangle2(Line2 line, Triangle2 triangle)
 {
     this          = default(IntersectionLine2Triangle2);
     this.line     = line;
     this.triangle = triangle;
 }
Ejemplo n.º 21
0
        // 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);
        }
Ejemplo n.º 22
0
        // 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);
        }
Ejemplo n.º 23
0
 // Token: 0x06000439 RID: 1081 RVA: 0x0001318D File Offset: 0x0001138D
 public static bool Intersects(this Triangle2 triangle, Segment2 segment)
 {
     return(segment.Intersects(triangle));
 }
Ejemplo n.º 24
0
 // Token: 0x06000436 RID: 1078 RVA: 0x00013172 File Offset: 0x00011372
 public static bool Intersects(this Triangle2 triangle, Line2 line)
 {
     return(line.Intersects(triangle));
 }
Ejemplo n.º 25
0
 // 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;
 }
Ejemplo n.º 27
0
        // 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());
        }