[PYTHON] AtCoder Grand Contest 046: A --Takahashikun, The Strider Animationszeichnung

Ich habe es nicht gesehen, aber ich habe versucht, ein Diagramm von Problem A von AGC046 zu zeichnen. Übrigens, meine Bewertung ist momentan 624 ... Ich habe keinen Sinn, aber es macht Spaß, also bewege ich mich langsam Schritt für Schritt vorwärts ❤️ mypage

Wenn Sie Probleme haben, gehen Sie bitte zu hier! Ich frage mich, ob ich mit dem folgenden Code simulieren kann, ich weiß es nicht. Es tut mir leid, wenn es anders ist.

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

def simulate(X):
    #Eine Liste, in der die Punkte gespeichert sind, die Takahashi erreichen wird
    x=[]
    y=[] 
    #Startposition
    x.append(0)
    y.append(0)
    #Wie oft, um zum Start zurückzukehren, kann aus dieser Formel berechnet werden, Problem A kann damit AC sein
    K = 360 / math.gcd(X,360) 
    #Die 0-Grad-Achse liegt nördlich des Starts
    deg = 0 
    
    for i in range(int(K)): #Ngo sucht K Punkte
        next_x = x[-1] - np.sin(deg*(np.pi/180)) #Berechnen Sie die x-Koordinate des nächsten Punkts aus dem vorherigen Punkt und dem aktuellen Winkel
        next_y = y[-1] + np.cos(deg*(np.pi/180)) #Berechnen Sie die y-Koordinate des nächsten Punkts aus dem vorherigen Punkt und dem aktuellen Winkel
        x.append(next_x) #Speichern Sie x Punkte
        y.append(next_y) #Speichern Sie Ihren Punkt
        deg+=X #X Grad drehen
    return x,y

#Beim Ändern von 90 Grad
X=90
x,y = simulate(X)

plt.plot(x, y,'b-o')
#Unten finden Sie die Einstellungen, die das Anzeigen in diesem Diagramm erleichtern sollen
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))

Das Ausführungsergebnis des obigen Codes sieht wie folgt aus. image.png

Wenn Sie das Argument von 90 auf 136 ändern, sieht es ziemlich niedlich aus. image.png

Wenn Sie eine Animation mit dem folgenden Code generieren,

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()

Es sieht wie folgt aus (wenn X = 136). qiita2.gif

Wie nennt man so eine schöne Figur? ??

Es ist ein kurzer Artikel, aber danke fürs Lesen ♡

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)

Ich habe das Gefühl, dass die Methode zum Ermitteln der x-Koordinate des Zentrums nicht streng ist, aber es ist einfach und es sieht so aus, als würde es tatsächlich gezeichnet, also ... lol Das Folgende ist ein Ausführungsbeispiel (wenn X = 260) image.png

Referenz

Animiertes GIF mit matplotlib ohne Verwendung von imagemagick speichern Linien mit matplotlib animieren Zeichnen Sie mit Matplotlib Figuren wie Kreise und Rechtecke

Recommended Posts

AtCoder Grand Contest 046: A --Takahashikun, The Strider Animationszeichnung
Python-Skript zum Abrufen einer Liste von Eingabebeispielen für den AtCoder-Wettbewerb
AtCoder Grand Contest 041 Bewertung
AtCoder Grand Contest 048 Bewertung
AtCoder Grand Contest 045 Bewertung
AtCoder Grand Contest 044 Bewertung
AtCoder Grand Contest 046 Bewertung
AtCoder Anfängerwettbewerb 166 A Erklärung des Problems "A? C" (Python3, C ++, Java)
AtCoder Grand Contest 041 Teilnahmebericht
AtCoder Grand Contest 040 Teilnahmebericht
AtCoder Grand Contest 047 Teilnahmebericht
AtCoder Beginner Contest 169 Eine Erklärung des Problems "Multiplikation 1" (Python3, C ++, Java)
AtCoder Grand Contest Past Question Challenge 2
Die Geschichte der Teilnahme an AtCoder
AtCoder Grand Contest Vergangene Frage Herausforderung 1
Die Geschichte des Exportierens eines Programms
[Erklärung zum AtCoder] Kontrollieren Sie die A-, B- und C-Probleme von ABC182 mit Python!
[AtCoder Erklärung] Kontrollieren Sie ABC184 A, B, C Probleme mit Python!
AtCoder Beginner Contest 102 Rückblick auf frühere Fragen
AtCoder Beginner Contest 072 Rückblick auf frühere Fragen
AtCoder Beginner Contest 085 Rückblick auf frühere Fragen
AtCoder Beginner Contest 113 Rückblick auf frühere Fragen
AtCoder Beginner Contest 074 Rückblick auf frühere Fragen
AtCoder Beginner Contest 051 Rückblick auf frühere Fragen
AtCoder Beginner Contest 127 Rückblick auf frühere Fragen
AtCoder Beginner Contest 119 Rückblick auf frühere Fragen
AtCoder Beginner Contest 151 Rückblick auf frühere Fragen
AtCoder Beginner Contest 075 Rückblick auf frühere Fragen
AtCoder Beginner Contest 054 Rückblick auf frühere Fragen
AtCoder Beginner Contest 110 Rückblick auf frühere Fragen
AtCoder Beginner Contest 117 Rückblick auf frühere Fragen
AtCoder Beginner Contest 070 Rückblick auf frühere Fragen
AtCoder Beginner Contest 105 Rückblick auf frühere Fragen
AtCoder Beginner Contest 112 Rückblick auf frühere Fragen
AtCoder Beginner Contest 076 Rückblick auf frühere Fragen
Versuchen Sie, eine einfache Animation in Python zu zeichnen
AtCoder Beginner Contest 069 Rückblick auf frühere Fragen
AtCoder Beginner Contest 056 Rückblick auf frühere Fragen
AtCoder Beginner Contest 087 Rückblick auf frühere Fragen
AtCoder Beginner Contest 067 Rückblick auf frühere Fragen
Messen Sie die Assoziationsstärke in einer Kreuztabelle
AtCoder Beginner Contest 093 Rückblick auf frühere Fragen
AtCoder Beginner Contest 046 Rückblick auf frühere Fragen
[Python] [Erklärung] AtCoder Typischer DP-Wettbewerb: Ein Wettbewerb
AtCoder Beginner Contest 049 Rückblick auf frühere Fragen
AtCoder Beginner Contest 081 Rückblick auf frühere Fragen
AtCoder Beginner Contest 047 Rückblick auf frühere Fragen
AtCoder Beginner Contest 060 Rückblick auf frühere Fragen
AtCoder Beginner Contest 057 Rückblick auf frühere Fragen
AtCoder Beginner Contest 121 Rückblick auf frühere Fragen
AtCoder Beginner Contest 126 Rückblick auf frühere Fragen
AtCoder Beginner Contest 103 Rückblick auf frühere Fragen
AtCoder Beginner Contest 061 Rückblick auf frühere Fragen
AtCoder Beginner Contest 059 Rückblick auf frühere Fragen
AtCoder Beginner Contest 044 Rückblick auf frühere Fragen
AtCoder Beginner Contest 083 Rückblick auf frühere Fragen
AtCoder Beginner Contest 048 Rückblick auf frühere Fragen