Exemplo n.º 1
0
        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
            });
        }
Exemplo n.º 2
0
 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) }));