루로의 삼각형

16611 단어 파이썬matplotlib
import matplotlib.pyplot as plt
import numpy as np

def rotate(a,theta):
    return np.dot(a,np.array([(np.cos(theta),-np.sin(theta)),(np.sin(theta),np.cos(theta))]))

fig,ax = plt.subplots(figsize=(5,5),facecolor='white',dpi=100)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))
ax.set_aspect('equal')
r = 1
ax.axis([-r*1.2, r*1.2, -r*1.2, r*1.2])
ax.text(0,0,'O',va='top',ha='right')
ax.plot(*list(zip(*[np.dot(r,(np.cos(e),np.sin(e)))  for e in np.arange(0,2*np.pi,1/100)])),color='black',alpha=0.1,linestyle='-.')
ax.plot(*list(zip(*[(0,r),(-np.sqrt(3)*r/2,-r/2),(np.sqrt(3)*r/2,-r/2),(0,r)])),color='black',alpha=0.2)
for i,c in enumerate(['blue','red','green']):
    ax.plot(*list(zip(*[rotate(np.dot(np.sqrt(3)*r,(np.cos(e),np.sin(e))) + (0,r), 2*np.pi*i/3) for e in np.arange(0,2*np.pi,1/100)])),color=c,alpha=0.4,linestyle='--')
    ax.plot(*list(zip(*[rotate(np.dot(np.sqrt(3)*r,(np.cos(e),np.sin(e))) + (0,r), 2*np.pi*i/3) for e in np.arange(8/6*np.pi,10/6*np.pi,1/100)])),color=c,alpha=1,linewidth=2)
ax.set_xticks([e for e in np.arange(-r,r,r/2)]+[r])
ax.set_xticklabels(['-r',r'-$\frac{r}{2}$','',r'$\frac{r}{2}$','r'])
ax.set_yticks([e for e in np.arange(-r,r,r/2)]+[r])
ax.set_yticklabels(['-r',r'-$\frac{r}{2}$','',r'$\frac{r}{2}$','r'])
plt.show()
plt.clf()
plt.close()



좌표 $(0,r)$의 점을 중심으로 반경 $\sqrt{3}r$로 하단에 그린 푸른 호만을 생각해, 나머지는 그것을 $\frac{2}{3}\pi$ 씩 돌리고 있습니다 (정부가 반대로 시계 방향으로되어 있습니다).plot() 의 사용법은 ax.plot(x=[x座標だけのリスト],y=[y座標だけのリスト]) 라고 하는 것이 기본입니다만, 따로따로 구하거나 분할하거나 하는 것이 기분 나쁘기 때문에 zip 메소드의 반대를 하는 방법으로 1행으로 쓰고 있습니다.
list(zip((0,1,2,3),(10,11,12,13)))

[(0, 10), (1, 11), (2, 12), (3, 13)]
list(zip(*[(0, 10), (1, 11), (2, 12), (3, 13)]))

[(0, 1, 2, 3), (10, 11, 12, 13)]

좋은 웹페이지 즐겨찾기