wikipedia:トロコイドを参考にして。数式打ち込むだけで芸はない。
Trochoid
import numpy as np from matplotlib import pyplot as plt RANGE = 0.001 rm = 1. rds = [1./5., 1./2., 1., 2., 3.] sita = np.arange(-8., 8., RANGE) for rd in rds: x = rm * sita - rd * np.sin(sita) y = rm - rd * np.cos(sita) plt.plot(x, y) plt.legend(rds) plt.axhline(color="black") plt.axvline(color="black") plt.show()
Epitrochoid
import numpy as np from matplotlib import pyplot as plt RANGE = 0.001 rc = 3. rm = 1. rd = 0.5 sita = np.arange(-np.pi, np.pi, RANGE) x = (rc + rm) * np.cos(sita) - rd * np.cos((rc+rm)/rm*sita) y = (rc + rm) * np.sin(sita) - rd * np.sin((rc+rm)/rm*sita) plt.plot(x, y, "r", rc*np.cos(sita), rc*np.sin(sita), "b") plt.axhline(color="black") plt.axvline(color="black") plt.show()
Hypotrochoid
これについてはパラメータを変更するとそれなりに変化があって面白い。
import numpy as np from matplotlib import pyplot as plt RANGE = 0.001 rc = 5. rm = 3. rd = 5. sita = np.arange(0., np.pi*6, RANGE) x = (rc - rm) * np.cos(sita) + rd * np.cos((rc-rm)/rm*sita) y = (rc - rm) * np.sin(sita) - rd * np.sin((rc-rm)/rm*sita) plt.plot(x, y, "r", rc*np.cos(sita), rc*np.sin(sita), "b") plt.axhline(color="black") plt.axvline(color="black") plt.show()
続けるとしたら以下のサイトを見ながら描いていこうかしら。
Wolfram Math World:Hypotrochoid
wikipedia:Spirograph
Wolfram Math World:Spirograph