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); }
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]))); }