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.
Wenn Sie das Argument von 90 auf 136 ändern, sieht es ziemlich niedlich aus.
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).
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)
Animiertes GIF mit matplotlib ohne Verwendung von imagemagick speichern Linien mit matplotlib animieren Zeichnen Sie mit Matplotlib Figuren wie Kreise und Rechtecke
Recommended Posts