[PYTHON] AtCoder Grand Contest 046: A --Takahashikun, dessin d'animation The Strider

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. image.png

Si vous changez l'argument de 90 à 136, il aura l'air assez mignon. image.png

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). qiita2.gif

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) image.png

référence

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

AtCoder Grand Contest 046: A --Takahashikun, dessin d'animation The Strider
Script Python pour obtenir une liste d'exemples d'entrée pour le concours AtCoder
AtCoder Grand Contest 041 Critique
AtCoder Grand Contest 048 Critique
AtCoder Grand Contest 045 Critique
AtCoder Grand Contest 044 Critique
AtCoder Grand Contest 046 Critique
AtCoder Beginner Contest 166 A Explication du problème "A? C" (Python3, C ++, Java)
AtCoder Grand Contest 041 Rapport de participation
AtCoder Grand Contest 040 Rapport de participation
AtCoder Grand Contest 047 Rapport de participation
AtCoder Beginner Contest 169 Explication du problème "Multiplication 1" (Python3, C ++, Java)
AtCoder Grand Contest Past Question Challenge 2
L'histoire de la participation à AtCoder
AtCoder Grand Contest Défi des questions passées 1
L'histoire de l'exportation d'un programme
[Explication AtCoder] Contrôlez les problèmes A, B, C d'ABC182 avec Python!
[Explication AtCoder] Contrôle ABC184 Problèmes A, B, C avec Python!
AtCoder Beginner Contest 102 Revue des questions précédentes
AtCoder Beginner Contest 072 Revue des questions précédentes
AtCoder Beginner Contest 085 Revue des questions précédentes
AtCoder Beginner Contest 113 Revue des questions précédentes
AtCoder Beginner Contest 074 Revue des questions précédentes
AtCoder Beginner Contest 051 Revue des questions précédentes
AtCoder Beginner Contest 127 Revue des questions précédentes
AtCoder Beginner Contest 119 Revue des questions précédentes
AtCoder Beginner Contest 151 Revue des questions précédentes
AtCoder Beginner Contest 075 Revue des questions précédentes
AtCoder Beginner Contest 054 Revue des questions précédentes
AtCoder Beginner Contest 110 Revue des questions précédentes
AtCoder Beginner Contest 117 Revue des questions précédentes
AtCoder Beginner Contest 070 Revue des questions précédentes
AtCoder Beginner Contest 105 Revue des questions précédentes
AtCoder Beginner Contest 112 Revue des questions précédentes
AtCoder Beginner Contest 076 Revue des questions précédentes
Essayez de dessiner une animation simple en Python
AtCoder Beginner Contest 069 Revue des questions précédentes
AtCoder Beginner Contest 056 Revue des questions précédentes
AtCoder Beginner Contest 087 Revue des questions précédentes
AtCoder Beginner Contest 067 Revue des questions précédentes
Mesurer la force de l'association dans un tableau croisé
AtCoder Beginner Contest 093 Revue des questions précédentes
AtCoder Beginner Contest 046 Revue des questions précédentes
[Python] [Explication] Concours DP typique d'AtCoder: un concours
AtCoder Beginner Contest 049 Revue des questions précédentes
AtCoder Beginner Contest 081 Revue des questions précédentes
AtCoder Beginner Contest 047 Revue des questions précédentes
AtCoder Beginner Contest 060 Revue des questions précédentes
AtCoder Beginner Contest 057 Revue des questions précédentes
AtCoder Beginner Contest 121 Revue des questions précédentes
AtCoder Beginner Contest 126 Revue des questions précédentes
AtCoder Beginner Contest 103 Revue des questions précédentes
AtCoder Beginner Contest 061 Revue des questions précédentes
AtCoder Beginner Contest 059 Revue des questions précédentes
AtCoder Beginner Contest 044 Revue des questions précédentes
AtCoder Beginner Contest 083 Revue des questions précédentes
AtCoder Beginner Contest 048 Revue des questions précédentes