0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ゴスパー曲線(Gosper curve)

Posted at

はじめに

フラクタル曲線の定番といえばコッホ曲線、ドラゴン曲線、ヒルベルト曲線などですが、
ここでは、ゴスパー曲線のプログラムを残しておきたいと思います。

ゴスパー曲線

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;
    }
  }
}

image.png
image.png
image.png
image.png
image.png
image.png
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?