Je ne l'ai pas vu, mais j'ai essayé de dessiner un graphique du problème A d'AGC046. Au fait, ma note est de 624 en ce moment ... Je n'ai pas de sens, mais c'est amusant alors j'avance lentement étape par étape ❤️ mypage
Si vous rencontrez des problèmes, rendez-vous sur ici! Je me demande si je peux simuler avec le code suivant, je ne sais pas. Je suis désolé si c'est différent.
import math
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def simulate(X):
#Une liste qui stocke l'ensemble des points que Takahashi atteindra
x=[]
y=[]
#La position de départ
x.append(0)
y.append(0)
#Combien de fois pour revenir au départ peut être calculé à partir de cette formule, le problème A peut être AC avec cela
K = 360 / math.gcd(X,360)
#L'axe 0 degré est juste au nord du départ
deg = 0
for i in range(int(K)): #Ong recherche des points K
next_x = x[-1] - np.sin(deg*(np.pi/180)) #Calculez la coordonnée x du point suivant à partir du point précédent et de l'angle actuel
next_y = y[-1] + np.cos(deg*(np.pi/180)) #Calculez la coordonnée y du point suivant à partir du point précédent et de l'angle actuel
x.append(next_x) #Économisez x points
y.append(next_y) #Enregistrer le point y
deg+=X #Tourner X degrés
return x,y
#Lors du changement de 90 degrés
X=90
x,y = simulate(X)
plt.plot(x, y,'b-o')
#Ci-dessous, les paramètres pour le rendre facile à voir dans ce graphique
plt.axes().set_aspect('equal','datalim')
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
Le résultat de l'exécution du code ci-dessus ressemble à ce qui suit.
Si vous changez l'argument de 90 à 136, il aura l'air assez mignon.
De plus, si vous générez une animation avec le code suivant,
fig = plt.figure()
imgs = []
plt.axes().set_aspect('equal','datalim')
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
for i in range(len(x)):
img = plt.plot(x[:i+1], y[:i+1], 'b-o')
imgs.append(img)
ani = animation.ArtistAnimation(fig, imgs, interval=1000)
ani.save('../qiita.gif', writer='pillow')
plt.show()
Cela ressemble à ce qui suit (lorsque X = 136).
Comment appelez-vous une si belle silhouette? ??
C'est un court article, mais merci d'avoir lu ♡
import matplotlib.patches as patches
center_x = (min(x)+max(x))/2
center_y = 0.5
radius = np.sqrt(1/(2*(1-np.cos(X*(np.pi/180)))))
circle = patches.Circle(xy=(center_x, center_y), radius=radius, fc='w', ec='r')
center = patches.Circle(xy=(center_x, center_y), radius=0.01, fc='r', ec='r')
ax.add_patch(circle)
ax.add_patch(center)
Je pense que la méthode pour trouver la coordonnée x du centre n'est pas stricte, mais c'est facile et ça y ressemble quand elle est réellement tracée, alors lol Ce qui suit est un exemple d'exécution (lorsque X = 260)
Enregistrer un GIF animé avec matplotlib sans utiliser imagemagick Animer des lignes avec matplotlib Dessinez des figures telles que des cercles et des rectangles avec Matplotlib
Recommended Posts