// 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);
        }
Beispiel #2
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);
        }