日本で一番有名なマークである
安産祈願マークを
プログラムで作ってみましょう!!!
動画はこちら
さて
作り方は
numpyとmatplotlibを用いて
マークを描いていきます。
widgetも用いて
うねうね変形できるようにもします。
ソースはこちら
結果はこうなります。
rで円の半径を変更
tで楕円の倍率を変更
colorで色を変更です。
楕円は
円の縦横方向を n 倍にすることで実現しています。
なので
縦方向であれば
xの値はそのままに
yの値の倍率を変えてあげると
縦方向の楕円になります。
今回のやり方では
まず半径を決めて円を用意します。
内側の円は1つめの円の倍率を変えただけです。
縦棒はxの値が0でyの値を変化させることで
実現させ、外側の棒たちは
大きな円を用意し
1つめの円から外側の円に向かう値で
描いています。
一応16本になるみたいなので
22.5度の角度になるような計算で
座標を求めています。
全部足すと
安産マークになります!!!!!!!
せっかくなので
GIFも作ってみましょう
matplotlibではアニメーション機能で
mp4やgifも作れますが
環境によっては動かないこともあり
今回は
画像をたくさん生成して
無理くりGIFに落とし込みます。
ソースはこちら
結果はこうなります。
びろんびろん動くのが
気持ちいいですよねーーーー
はい
周りのに安産祈願の方がいたら
是非送ってあげましょう!!
きっと喜ばれること
間違いなし
今回はここまでです。
それでは
安産祈願マークを
プログラムで作ってみましょう!!!
動画はこちら
さて
作り方は
numpyとmatplotlibを用いて
マークを描いていきます。
widgetも用いて
うねうね変形できるようにもします。
ソースはこちら
import numpy as np import matplotlib.pyplot as plt from ipywidgets import interact, FloatSlider, IntSlider,Select %matplotlib inline r = IntSlider(min=1, max=8, step=1, value=5) t = FloatSlider(min=1.0, max=1.5, step=0.1, value=1.0) c = Select(options=['black', 'red', 'blue','green'], value='black',description='coler : ',disabled=False) @interact(r=r,t=t,c=c) def plot_man(r,t,c): plt.figure(figsize=(10,9)) plt.axes().set_aspect('equal', 'datalim') # circle 1 x = [np.sin(np.radians(_x))*r for _x in np.linspace(-180,180,721)] y = [np.cos(np.radians(_y))*r*t for _y in np.linspace(-180,180,721)] plt.plot(x, y, c) # circle 2 x2 = [i*0.7 for i in x] y2 = [i*0.7 for i in y] plt.plot(x2, y2, c) # line x3 = [0,0] y3 = [min(y)*1.25,max(y)*1.25] plt.plot(x3, y3, c) # lines x4 = [i*1.2 for i in x] y4 = [i*1.2 for i in y] for i in range(16): x5 = [x[i*45],x4[i*45]] y5 = [y[i*45],y4[i*45]] plt.plot(x5, y5, c) plt.xlim([-20,20]) plt.ylim([-20,20]) plt.show()
結果はこうなります。
rで円の半径を変更
tで楕円の倍率を変更
colorで色を変更です。
楕円は
円の縦横方向を n 倍にすることで実現しています。
なので
縦方向であれば
xの値はそのままに
yの値の倍率を変えてあげると
縦方向の楕円になります。
今回のやり方では
まず半径を決めて円を用意します。
内側の円は1つめの円の倍率を変えただけです。
縦棒はxの値が0でyの値を変化させることで
実現させ、外側の棒たちは
大きな円を用意し
1つめの円から外側の円に向かう値で
描いています。
一応16本になるみたいなので
22.5度の角度になるような計算で
座標を求めています。
全部足すと
安産マークになります!!!!!!!
せっかくなので
GIFも作ってみましょう
matplotlibではアニメーション機能で
mp4やgifも作れますが
環境によっては動かないこともあり
今回は
画像をたくさん生成して
無理くりGIFに落とし込みます。
ソースはこちら
from PIL import Image, ImageDraw, ImageFont import numpy as np import matplotlib.pyplot as plt from ipywidgets import interact, FloatSlider, IntSlider,Select import os data_dir = 'anzan_data/' if not os.path.exists(data_dir): os.makedirs(data_dir) for a in range(30): plt.figure(figsize=(3,3)) plt.axes().set_aspect('equal', 'datalim') plt.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False) plt.tick_params(bottom=False, left=False, right=False, top=False) plt.xlim([-20,20]) plt.ylim([-20,20]) c ='black' n = (np.abs(np.sin(a))+1) # circle 1 x = [np.sin(np.radians(_x))*8 for _x in np.linspace(-180,180,721)] y = [np.cos(np.radians(_y))*8*n for _y in np.linspace(-180,180,721)] plt.plot(x, y, c) # circle 2 x2 = [i*0.7 for i in x] y2 = [i*0.7 for i in y] plt.plot(x2, y2, c) # line x3 = [0,0] y3 = [min(y)*1.25,max(y)*1.25] plt.plot(x3, y3, c) # lines x4 = [i*1.2 for i in x] y4 = [i*1.2 for i in y] for i in range(16): x5 = [x[i*45],x4[i*45]] y5 = [y[i*45],y4[i*45]] plt.plot(x5, y5, c) file_name = data_dir + 'tmp_{0:02}.png'.format(a) plt.savefig(file_name) images = [] for a in range(30): file_name = data_dir + 'tmp_{0:02}.png'.format(a) img = Image.open(file_name) images.append(img) gif_name = 'anzan.gif' images[0].save(gif_name,save_all=True, append_images=images[1:], optimize=False, duration=2, loop=0)
結果はこうなります。
びろんびろん動くのが
気持ちいいですよねーーーー
はい
周りのに安産祈願の方がいたら
是非送ってあげましょう!!
きっと喜ばれること
間違いなし
今回はここまでです。
それでは
コメントする