public static Shape SurfaceTest(int frameCount) { var plane = Parquets.Triangles(5, 10, 0.1).ToShape3().MassCentered(); //var plane = Surfaces.Plane(11, 11).Mult(1.0/11).MassCentered(); Vector3 NothingFn(int frameCount, Vector3[] points, Graph.Node node) => points[node.i]; var r = 0.2; var mult = 0.1; Vector3 GravityFn(int frameCount, Vector3[] points, Graph.Node node) { var position = points[node.i]; var moves = node.Siblings.Select(s => points[s.i]).Select(v => (v - position).ToLen(l => l - r)).ToArray(); var move = mult * moves.Sum(); //Debug.WriteLine(move); //if (move.Length > 0.25) // Debugger.Break(); return(position + move); } //var rules = plane.Points.Index().Select(_ => (DynoFunc)GravityFn).ToArray(); DynoFunc GetRule(Graph.Node n) { if (n.edges.Count < 6) { return((DynoFunc)NothingFn); } else { return((DynoFunc)GravityFn); } } var d = new SurfaceDyno(SurfaceFuncs.Hyperboloid, plane.Points2, plane.OrderedEdges, GetRule); d.Animate(frameCount); return(new Shape() { Points3 = d.Points, Convexes = plane.Convexes }); }
public static Shape CrateKershner8Maze(double tileLen, double angleD, double rotationAngle, int seed = 0, MazeType type = MazeType.SimpleRandom) { return(Parquets.PentagonalKershner8(tileLen, angleD).Rotate(rotationAngle).ToShape3().ToMaze(seed, type, new[] { (6, 7), (-6, -5) }));