Ejemplo n.º 1
0
        // 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);
        }
Ejemplo n.º 2
0
        // 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);
        }
Ejemplo n.º 3
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.º 4
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());
        }