Пример #1
0
        public GatewayPathway(IEnumerable <Gateway> gateways, bool cyclic = false)
        {
            List <TrianglePathway.Triangle> triangles = new List <TrianglePathway.Triangle>();

            bool    first              = true;
            Gateway previous           = default(Gateway);
            Vector3 previousNormalized = Vector3.Zero;

            foreach (var gateway in gateways)
            {
                var n = Vector3.Normalize(gateway.B - gateway.A);

                if (!first)
                {
                    if (Vector3.Dot(n, previousNormalized) < 0)
                    {
                        triangles.Add(new TrianglePathway.Triangle(previous.A, previous.B, gateway.A));
                        triangles.Add(new TrianglePathway.Triangle(previous.A, gateway.A, gateway.B));
                    }
                    else
                    {
                        triangles.Add(new TrianglePathway.Triangle(previous.A, previous.B, gateway.A));
                        triangles.Add(new TrianglePathway.Triangle(previous.B, gateway.A, gateway.B));
                    }
                }
                first = false;

                previousNormalized = n;
                previous           = gateway;
            }

            _trianglePathway = new TrianglePathway(triangles, cyclic);
        }
Пример #2
0
        public GatewayPathway(IEnumerable<Gateway> gateways, bool cyclic = false)
        {
            List<TrianglePathway.Triangle> triangles = new List<TrianglePathway.Triangle>();

            bool first = true;
            Gateway previous = default(Gateway);
            Vector3 previousNormalized = Vector3.Zero;
            foreach (var gateway in gateways)
            {
                var n = Vector3.Normalize(gateway.B - gateway.A);

                if (!first)
                {
                    if (Vector3.Dot(n, previousNormalized) < 0)
                    {
                        triangles.Add(new TrianglePathway.Triangle(previous.A, previous.B, gateway.A));
                        triangles.Add(new TrianglePathway.Triangle(previous.A, gateway.A, gateway.B));
                    }
                    else
                    {
                        triangles.Add(new TrianglePathway.Triangle(previous.A, previous.B, gateway.A));
                        triangles.Add(new TrianglePathway.Triangle(previous.B, gateway.A, gateway.B));
                    }
                }
                first = false;

                previousNormalized = n;
                previous = gateway;
            }

            _trianglePathway = new TrianglePathway(triangles, cyclic);

        }
        private void GeneratePath()
        {
            var rand = new Random();

            float xOffsetDeriv = 0;
            float xOffset = 0;

            var points = new List<Vector3>();
            for (var i = 0; i < 200; i++)
            {
                xOffsetDeriv = MathHelper.Clamp((float)rand.NextDouble() * 2 - (xOffsetDeriv * 0.0125f), -15, 15);
                xOffset += xOffsetDeriv;

                points.Add(new Vector3(xOffset + 1, 0, i) * 5);
                points.Add(new Vector3(xOffset - 1, 0, i) * 5);
            }

            _path = new TrianglePathway(Enumerable.Range(0, points.Count - 2).Select(i => new TrianglePathway.Triangle(points[i], points[i + 1], points[i + 2])));
        }