фракталы и «java.lang.OutOfMemoryError: Java heap space»

Я делаю фрактальную снежинку Коха в java и сохраняю ее в файле svg.

Я запоминаю фрактал с помощью класса LineStrip2D (это оболочка для ArrayList от Vec2D, которая реализует итерацию).

Основная функция такова:

public static LineStrip2D repeatPatternIntoLineStrip2D(
        LineStrip2D pattern,
        LineStrip2D polygon, 
        boolean repeatUp) {

    /*
     * pattern: must be a pattern between Vec(0,0) and Vec(1,0)
     *          (normalized beetween 0-1 and in X axis)
     * */

    float angle, distance;
    Vec2D pivot, a, b, direction, b1;
    LineStrip2D new_polygon = new LineStrip2D();

    new_polygon.add(pattern.vertices.get(0));
    a = polygon.vertices.get(0);

    int count=0;
    for (int i = 1; i < polygon.vertices.size(); i++) {
        b = polygon.vertices.get(i);
        a = polygon.vertices.get(i-1);

        distance = b.distanceTo(a);
        direction = b.sub(a).normalize();
        angle = PApplet.atan2(direction.y, direction.x);
        pivot = a;

        for (int j = 1; j < pattern.vertices.size(); j++) {
            Vec2D _b1 = pattern.vertices.get(j);

            b1 =  _b1.copy() ;

            if(repeatUp)b1.y *= -1;             
            b1.scaleSelf(distance);
            b1 = b1.rotate(angle);
            b1.addSelf(pivot);

            new_polygon.add(b1);
            count++;
        }
        a = b;
    }
    System.out.println(count);
    return new_polygon;
}

У меня есть шаблон с начальной кривой Коха:

enter image description here

И я звоню:

pattern = GeometryHelper.repeatPatternIntoLineStrip2D(pattern, pattern, false);

Теперь проблема:

После нескольких итераций (851968) у меня есть java.lang.OutOfMemoryError: пространство кучи Java . Как я могу избежать этой ошибки и получить огромный файл svg? Я думаю, что могу проделать этот процесс в несколько этапов, но я не понимаю, как реализовать его разумным способом.

0
задан javanna 3 January 2012 в 21:30
поделиться