Exemplo n.º 1
0
    // garbage collecting is really handy here...
    void snowflake(Vertex u, int N, double L)
    {
        if (N == 0)
        {
            if (A == null || AA.DistanceTo(u) < AA.DistanceTo(A))
            {
                A = u;
            }
            if (B == null || BB.DistanceTo(u) < BB.DistanceTo(B))
            {
                B = u;
            }
            return;
        }

        for (int i = 0; i < 6; i++)
        {
            if (i == 3 && u.parent != null)
            {
                continue;
            }

            Vertex v = new Vertex();
            v.heading = u.heading + Math.PI * i / 3.0;
            v.x       = u.x + L * Math.Cos(v.heading);
            v.y       = u.y + L * Math.Sin(v.heading);
            v.parent  = u;

            snowflake(v, N - 1, L / K);
        }
    }