はじめに
フラクタル曲線の定番といえばコッホ曲線、ドラゴン曲線、ヒルベルト曲線などですが、
ここでは、ゴスパー曲線のプログラムを残しておきたいと思います。
ゴスパー曲線
wikiに習って、Lシステムで描画します。
環境
Processing 4
プログラム
ChatGPTが、簡潔に書いてくれたのを、少し修正しました。
HashMap(連想配列)を始めて見ました。便利ですね。
PDFで書き出せば、イラレなどに持っていけます。
Processing
int order = 3; // フラクタルの階層(大きくするほど細かくなる)
float length = 10 * pow(0.4, order-4); // 初期の線の長さ(1,150)(2,60)(3,25)(4,10)(5,4)(6,1.5)
String axiom = "A"; // 初期のルール
String sentence = axiom;
HashMap<Character, String> rules = new HashMap<Character, String>();
void setup() {
size(1000, 800);
background(255);
rules.put('A', "A-B--B+A++AA+B-");
rules.put('B', "+A-BB--B-A++A+B");
for (int i = 0; i < order; i++) {
sentence = generate(sentence);
}
translate(width *0.6, height *0.8);
drawLSystem(sentence, length);
}
String generate(String input) {
StringBuilder next = new StringBuilder();
for (char c : input.toCharArray()) {
if (rules.containsKey(c)) {
next.append(rules.get(c));
} else {
next.append(c);
}
}
return next.toString();
}
void drawLSystem(String instructions, float len) {
float angle = radians(60);
for (char c : instructions.toCharArray()) {
switch (c) {
case 'A': case 'B':
stroke(0);
line(0, 0, len, 0);
translate(len, 0);
break;
case '+':
rotate(angle);
break;
case '-':
rotate(-angle);
break;
}
}
}