LoginSignup
1

More than 1 year has passed since last update.

posted at

updated at

「プログラムでシダを描画する」をなでしこで描画する

2015年に空前のシダ描画ブーム到来して以来、私たちは『何か』を待っていました。それが何かはそのときは分かりませんでした。しかし、2020年の年末ついにその『何か』が明らかになりました。

それは・・・なでしこでシダを描画したかったんです!

こんな風に描画できます!

sida.png

手っ取り早く動かしたい方は

  • こちらで実際にWebブラウザ上で実行できます

なでしこv3のプログラム

もし余力があれば、以下のプログラムを、なでしこv3のエディタに貼り付けて実行してみてください。キャンバスは500x550に設定すると全体が描画されます。

シダ.nako3
# 「プログラムでシダを描画する」
N = 20
xm = 0
ym = 0.5
h = 0.6

width = 500
height = 500

W1x = 関数(x, y) それは、0.836 * x + 0.044 * y。ここまで。
W1y = 関数(x, y) それは、-0.044 * x + 0.836 * y + 0.169。ここまで。
W2x = 関数(x, y) それは、-0.141 * x + 0.302 * y。ここまで。
W2y = 関数(x, y) それは、0.302 * x + 0.141 * y + 0.127。ここまで。
W3x = 関数(x, y) それは、0.141 * x - 0.302 * y。ここまで。
W3y = 関数(x, y) それは、0.302 * x + 0.141 * y + 0.169。ここまで。
W4x = 関数(x, y) それは、0。ここまで。
W4y = 関数(x, y) それは、0.175337 * y。ここまで。

●(kのxとyで)fとは
  もし、0 < kならば
    f(k - 1, W1x(x, y), W1y(x, y))
    もし、(10の乱数) < 3ならば
      f(k - 1, W2x(x, y), W2y(x, y))
    ここまで。
    もし、(10の乱数) < 3ならば
      f(k - 1, W3x(x, y), W3y(x, y))
    ここまで。
    もし、(10の乱数) < 3ならば
      f(k - 1, W4x(x, y), W4y(x, y))
    ここまで。
  違えば
    s = 490
  ここまで。
  XX = INT(x * s + width * 0.5)
  YY = INT(height - y * s)
  [XX, YY, 1, 1]へ四角描画。
ここまで。

「少し実行まで時間がかかります。気長に待ってね。」と表示。
C=RGB(0,129,0)
1に線太設定。Cに線色設定。Cに塗色設定。
1秒後には
  f(N, 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
What you can do with signing up
1