我在做java中的Koch fractal snowflake並將其保存在svg文件中。分形和「java.lang.OutOfMemoryError:Java堆空間」
我正在用LineStrip2D類記憶分形(它是實現迭代的Vec2D的ArrayList的包裝)。
主要功能是這一個:
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;
}
我有初始Koch曲線的模式:
我呼籲:
pattern = GeometryHelper.repeatPatternIntoLineStrip2D(pattern, pattern, false);
現在的問題:
經過一些迭代(851968)我有一個java.lang.OutOfMemoryError:Java堆空間。 我該如何避免這個錯誤,並實現一個巨大的SVG文件? 我想我可以在各個步驟中完成這個過程,但我不明白如何以一種聰明的方式實現它。
我懷疑消除一個變量將解決他的堆大小問題。 – 2012-01-03 20:41:44
我只是指他在代碼 – 2012-01-03 20:51:41
@ Jason482:+1中抵消-1的一些無用操作:答案是正確的,包含可能有用的附加信息,並且實際上是* first * correct回答(儘管比其他細節略少)。不值得downvote,恕我直言。 – Mac 2012-01-03 21:02:01