pbj0812의 코딩 일기

[PYTHON] 태극문양 그리기 본문

ComputerLanguage_Program/PYTHON

[PYTHON] 태극문양 그리기

pbj0812 2021. 8. 16. 01:00

0. 목표

 - 태극문양 그리기

1. 실습

 1) library 호출

import matplotlib.pyplot as plt
import math
import numpy as np

 2) 반원 데이터 생성

  - 붉은 반원, 푸른 반원으로 쪼개서 그리기

# 붉은 반원
x1 = np.linspace(-math.sqrt(2.5 * 2.5 * 9 / 13), 2.5, 1000)
y1 = []
for i in x1:
    y1.append(math.sqrt((2.5 * 2.5) - (i * i)))
    
x2 = np.linspace(math.sqrt(2.5 * 2.5 * 9 / 13), 2.5, 1000)
y2 = []
for i in x2:
    y2.append(-math.sqrt((2.5 * 2.5) - (i * i)))
    
x_upper = list(x1) + list(x2)[::-1]
y_upper = list(y1) + list(y2)[::-1]

# 푸른 반원
x3 = np.linspace(-2.5, -math.sqrt(2.5 * 2.5 * 9 / 13), 1000)
y3 = []
for i in x3:
    y3.append(math.sqrt((2.5 * 2.5) - (i * i)))
    
x4 = np.linspace(-2.5, math.sqrt(2.5 * 2.5 * 9 / 13), 1000)
y4 = []
for i in x4:
    y4.append(-math.sqrt((2.5 * 2.5) - (i * i)))
    
x_lower = list(x3)[::-1] + list(x4)
y_lower = list(y3)[::-1] + list(y4)

 3) 작은 원 데이터 생성

  - 붉은 원, 푸른 원 따로 생성

  - 원점을 중심으로 하는 작은 원을 생성한 뒤 좌표 이동하는 방식

# 푸른 원
x_little1 = np.linspace(-1.25, 1.25, 1000)
y_little_upper_1 = []
y_little_lower_1 = []
for i in x_little1:
    y_little_upper_1.append(math.sqrt((1.25 * 1.25) - (i * i)))
    y_little_lower_1.append(-math.sqrt((1.25 * 1.25) - (i * i)))
    
x_little1 = list(map(lambda x : x + (15 / (4 * math.sqrt(13))), x_little1))
y_little_upper_1 = list(map(lambda x : x + ((-2 / 3) * (15 / (4 * math.sqrt(13)))), y_little_upper_1))
y_little_lower_1 = list(map(lambda x : x + ((-2 / 3) *  (15 / (4 * math.sqrt(13)))), y_little_lower_1))

x_little1 = x_little1 + x_little1[::-1]
y_little1 = y_little_upper_1 + y_little_lower_1[::-1]

# 붉은 원
x_little2 = np.linspace(-1.25, 1.25, 1000)
y_little_upper_2 = []
y_little_lower_2 = []
for i in x_little2:
    y_little_upper_2.append(math.sqrt((1.25 * 1.25) - (i * i)))
    y_little_lower_2.append(-math.sqrt((1.25 * 1.25) - (i * i)))
    
x_little2 = list(map(lambda x : x - (15 / (4 * math.sqrt(13))), x_little2))
y_little_upper_2 = list(map(lambda x : x + ((2 / 3) * (15 / (4 * math.sqrt(13)))), y_little_upper_2))
y_little_lower_2 = list(map(lambda x : x + ((2 / 3) *  (15 / (4 * math.sqrt(13)))), y_little_lower_2))

x_little2 = x_little2 + x_little2[::-1]
y_little2 = y_little_upper_2 + y_little_lower_2[::-1]

 4) 그리기

# 도화지
fig, ax = plt.subplots()
fig.set_size_inches(15, 10)
ax.set_xticks([])
ax.set_yticks([])
ax.set_xlim([-7.5, 7.5])
ax.set_ylim([-5, 5])

# 반원
ax.fill(x_lower, y_lower, '#144A9D')
ax.fill(x_upper, y_upper, '#D0303C')

# 작은 원
ax.fill(x_little1, y_little1, '#144A9D')
ax.fill(x_little2, y_little2, '#D0303C')

  - 결과

2. 참고

 - 태극기

Comments