파이썬 프로그래밍 안산 기원 마크를 만들거야.

일본에서 가장 유명한 마크

안산 기원 마크
프로그램으로 만들어 보자! ! !

동영상은 여기
htps //w w. 요츠베. 코 m / m 베 d / 5 우 7M65 세 3c

그럼
만드는 방법은
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()

jupyter notebook에서
움직일 수 있습니다.

결과는 이렇게 됩니다.



r로 원의 반경 변경
t로 타원의 배율 변경
color로 색상을 변경합니다.

타원은
원의 종횡 방향을 n배로 하는 것으로 실현하고 있습니다.

그래서
세로 방향이면
x의 값은 그대로
y의 값의 배율을 바꾸면
세로 타원이 됩니다.

이번 방식에서는
우선 반경을 정하여 원을 준비합니다.
안쪽의 원은 첫 번째 원의 배율을 바꾼 것뿐입니다.

세로 막대는 x의 값이 0이고 y의 값을 변경하여
깨닫고 외부 막대는

큰 원을 준비하십시오.
첫 번째 원에서 외부 원으로 향하는 값으로
그려져 있습니다.

일단 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)


jupyter notebook에서 실행하면
안산 기원 마크가 notebook이 있는 디렉토리에
만들어집니다.

결과는



빌론 빌론
기분 좋은 GIF가 생성됩니다.

꼭 관심있는 분은
시도해보십시오.

그럼

좋은 웹페이지 즐겨찾기