1
2

More than 1 year has passed since last update.

【Python】ワンライナーコッホ曲線【ネタ】

Last updated at Posted at 2022-07-05

はじめに

徒然なるままに研究室に居ると、隣で後輩が課題のコッホ曲線を描画するプログラムを書いていたので、自分も書いてみむとて書くなり。

コッホ曲線とは

コッホ曲線(コッホきょくせん、英: Koch curve)はフラクタル図形の一つ。スウェーデンの数学者ヘルゲ・フォン・コッホ (Helge von Koch) が考案した[1]。線分を3等分し、分割した2点を頂点とする正三角形の作図を無限に繰り返すことによって得られる図形である。  - コッホ曲線 - Wikipedia

こんなの↓
Koch_curve.svg.png

書くなり

koch = lambda x: np.r_[x[:1],(x[:-1]+np.diff(x,1,0)@np.array([[[1/3,0],[0,1/3]],[[.5,.5/3**.5],[-.5/3**.5,.5]],[[2/3,0],[0,2/3]],[[1,0],[0,1]]])).T.reshape(2,-1).T]

つかいかた

最低2点の座標x,yを渡す。
ex)[[0, 0], [1, 0]]

import numpy as np

a = [[0, 0], [1, 0]]
koch(a)
# ---> array([[0., 0.], [0.33333333, 0.], [0.5, 0.28867513], [0.66666667, 0.], [1., 0.]])

動作確認

import numpy as np
import matplotlib.pyplot as plt

a = [[0, 0], [1, 0]]
for _ in range(5):
    a = koch(a)
plt.plot(*a.T, lw=1)
plt.axis("equal")
plt.show()

download.png

簡単な解説

隣り合った頂点へのベクトルに1/3倍、1/$\sqrt{3}$倍+$\pi$/6回転、2/3倍、1倍の演算をそれぞれ施して、
それを それぞれの頂点座標に足し合わす操作をしています。

1
2
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
1
2