Exemple #1
0
        internal static bool _2DProjectionCheck(TessellatedSolid solid, TessellatedSolid solidBlocking, double[] direction)
        {
            var movingProj = _3Dto2D.Get2DProjectionPoints(solid.Vertices, direction);
            var moving2D   = new _3Dto2D
            {
                ThreeD = solid,
                Points = movingProj,
                Edges  = _3Dto2D.Get2DEdges(solid, movingProj)
            };
            var referenceProj = _3Dto2D.Get2DProjectionPoints(solidBlocking.Vertices, direction);
            var reference2D   = new _3Dto2D
            {
                ThreeD = solidBlocking,
                Points = referenceProj,
                Edges  = _3Dto2D.Get2DEdges(solidBlocking, referenceProj)
            };
            var blocked =
                moving2D.Edges.Any(
                    movEdge =>
                    reference2D.Edges.Any(
                        refEdge =>
                        NonadjacentBlockingDeterminationPro.DoIntersect(movEdge, refEdge)));

            return(blocked);
        }
Exemple #2
0
        private static bool newApproachBoundingBox(double[] v, double[] bB, double[] mB)
        {
            var mV1       = new Vertex(new[] { mB[0], mB[2], mB[4] });
            var mV2       = new Vertex(new[] { mB[0], mB[3], mB[4] });
            var mV3       = new Vertex(new[] { mB[1], mB[3], mB[4] });
            var mV4       = new Vertex(new[] { mB[1], mB[2], mB[4] });
            var mV5       = new Vertex(new[] { mB[0], mB[2], mB[5] });
            var mV6       = new Vertex(new[] { mB[0], mB[3], mB[5] });
            var mV7       = new Vertex(new[] { mB[1], mB[3], mB[5] });
            var mV8       = new Vertex(new[] { mB[1], mB[2], mB[5] });
            var movingVer = new List <Vertex> {
                mV1, mV2, mV3, mV4, mV5, mV6, mV7, mV8
            };
            var mE1       = new Edge(mV1, mV2, true);
            var mE2       = new Edge(mV1, mV4, true);
            var mE3       = new Edge(mV1, mV5, true);
            var mE4       = new Edge(mV2, mV3, true);
            var mE5       = new Edge(mV2, mV6, true);
            var mE6       = new Edge(mV7, mV6, true);
            var mE7       = new Edge(mV7, mV3, true);
            var mE8       = new Edge(mV7, mV8, true);
            var mE9       = new Edge(mV5, mV6, true);
            var mE10      = new Edge(mV5, mV8, true);
            var mE11      = new Edge(mV4, mV3, true);
            var mE12      = new Edge(mV4, mV8, true);
            var movingEdg = new List <Edge> {
                mE1, mE2, mE3, mE4, mE5, mE6, mE7, mE8, mE9, mE10, mE11, mE12
            };

            var bV1         = new Vertex(new[] { bB[0], bB[2], bB[4] });
            var bV2         = new Vertex(new[] { bB[0], bB[3], bB[4] });
            var bV3         = new Vertex(new[] { bB[1], bB[3], bB[4] });
            var bV4         = new Vertex(new[] { bB[1], bB[2], bB[4] });
            var bV5         = new Vertex(new[] { bB[0], bB[2], bB[5] });
            var bV6         = new Vertex(new[] { bB[0], bB[3], bB[5] });
            var bV7         = new Vertex(new[] { bB[1], bB[3], bB[5] });
            var bV8         = new Vertex(new[] { bB[1], bB[2], bB[5] });
            var blockingVer = new List <Vertex> {
                bV1, bV2, bV3, bV4, bV5, bV6, bV7, bV8
            };
            var bE1         = new Edge(bV1, bV2, true);
            var bE2         = new Edge(bV1, bV4, true);
            var bE3         = new Edge(bV1, bV5, true);
            var bE4         = new Edge(bV2, bV3, true);
            var bE5         = new Edge(bV2, bV6, true);
            var bE6         = new Edge(bV7, bV6, true);
            var bE7         = new Edge(bV7, bV3, true);
            var bE8         = new Edge(bV7, bV8, true);
            var bE9         = new Edge(bV5, bV6, true);
            var bE10        = new Edge(bV5, bV8, true);
            var bE11        = new Edge(bV4, bV3, true);
            var bE12        = new Edge(bV4, bV8, true);
            var blockingEdg = new List <Edge> {
                bE1, bE2, bE3, bE4, bE5, bE6, bE7, bE8, bE9, bE10, bE11, bE12
            };

            var movingProj   = _3Dto2D.Get2DProjectionPoints(movingVer, v);
            var blockingProj = _3Dto2D.Get2DProjectionPoints(blockingVer, v);
            var moving2D     = new _3Dto2D {
                Points = movingProj, Edges = _3Dto2D.Get2DEdges2(movingEdg, movingVer, movingProj)
            };
            var blocking2D = new _3Dto2D {
                Points = blockingProj, Edges = _3Dto2D.Get2DEdges2(blockingEdg, blockingVer, movingProj)
            };

            return(moving2D.Edges.Any(movEdge => blocking2D.Edges.Any(refEdge => NonadjacentBlockingDeterminationPro.DoIntersect(movEdge, refEdge))));
        }