Visualisieren Sie Punkt P, der mit Python funktioniert

Was ich getan habe

Ich habe einen Punkt P gezeichnet, der mit Python funktioniert, und ihn als GIF ausgegeben.

ugokutenP02.gif

Beispiel

Stellen wir uns das Problem des Bewegungspunkts P wie folgt vor.

Es gibt ein rechteckiges ABCD mit AB = 4 cm, BC = 6 cm, und Punkt P beginnt bei A und geht bei 1 cm pro Sekunde von A → B → C → D aus. Der Bereich von △ APD nach $ x $ Sekunden ab Abflug sei $ y $ cm 2 </ sup>.

Quelle https://math.005net.com/yoten/doten.php (2 cm pro Sekunde sind jedoch 1 cm pro Sekunde.)

Zeichnung

Umgebung

1. Machen Sie eine leere Figur

Bereiten Sie sich zunächst auf das Zeichnen der Figur vor.

import matplotlib.pyplot as plt

fig = plt.figure()
ax1 = fig.add_subplot(111)

plt.show()

image.png

2. Zeigen Sie ein Rechteck an

Machen Sie ein Rechteck 4 cm lang und 6 cm breit. Hier gibt es verschiedene Möglichkeiten, um auszuwählen, wo der Koordinatenursprung $ O $ platziert werden soll. Wählen Sie diesmal den Schwerpunkt des Rechtecks (2 cm lang und 3 cm breit) als Ursprung $ O $ und bestimmen Sie die Koordinaten der Punkte A, B, C und D. Dies erleichtert den Code, wenn die Beschriftung später eine Runde außerhalb des Rechtecks erscheinen soll. 1576855216649.jpg


import numpy as np #hinzufügen
import matplotlib.pyplot as plt
import matplotlib.patches as pat #hinzufügen

fig = plt.figure()

ax1 = fig.add_subplot(111)

ax1.set_xlim(-4,4)
ax1.set_ylim(-3,3)

A=np.array([-3,2])
B=np.array([-3,-2])
C=np.array([3,-2])
D=np.array([3,2])

p = pat.Polygon(xy = [A,B,C,D],
                edgecolor='black',
                facecolor='white',
                linewidth=1.6)

ax1.add_patch(p)

plt.show()

image.png

3. Zeigen Sie die Länge der Seite und den Namen des Scheitelpunkts an

Zeichnen Sie die Länge der Seite text kann Zeichen zeichnen, indem die x-Koordinate im ersten Argument, die y-Koordinate im zweiten Argument und der Name im dritten Argument angegeben werden.

#Zeigen Sie die Länge der Seite an
ax1.text(-3.5,0.0,"4cm",horizontalalignment='center',verticalalignment='center')
ax1.text(0.0,-2.5,"6cm",horizontalalignment='center',verticalalignment='center')

Passen Sie die Platzierung nach Ihren Wünschen an.

Als nächstes wird der Name des Punktes außerhalb des Rechtecks angezeigt. Sie können die Anzeigeposition von Hand sowie die Länge der Seite festlegen.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as pat

fig = plt.figure()
ax1 = fig.add_subplot(111)

ax1.set_xlim(-4,4)
ax1.set_ylim(-3,3)

A=np.array([-3,2])
B=np.array([-3,-2])
C=np.array([3,-2])
D=np.array([3,2])

pol = pat.Polygon(xy = [A,B,C,D],
                edgecolor='black',
                facecolor='white',
                linewidth=1.6)

ax1.add_patch(pol)

#Zeigen Sie die Länge der Seite an
ax1.text(-3.5,0.0,"4cm",horizontalalignment='center',verticalalignment='center')
ax1.text(0.0,-2.5,"6cm",horizontalalignment='center',verticalalignment='center')

#Zeigen Sie den Namen des Scheitelpunkts an
scale=1.1
ax1.text(A[0]*scale,A[1]*scale,"A",fontsize=15,horizontalalignment='center',verticalalignment='center')
ax1.text(B[0]*scale,B[1]*scale,"B",fontsize=15,horizontalalignment='center',verticalalignment='center')
ax1.text(C[0]*scale,C[1]*scale,"C",fontsize=15,horizontalalignment='center',verticalalignment='center')
ax1.text(D[0]*scale,D[1]*scale,"D",fontsize=15,horizontalalignment='center',verticalalignment='center')

plt.show()

image.png

4. Anzeigepunkt P.

Die Hauptrolle ist endlich da. Definieren Sie die Koordinaten von Punkt P und zeigen Sie die Punkte mit "ax1.plot ()" an. Die Anzeige des Namens von Punkt P entspricht der der Punkte A, B, C und D.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as pat

fig = plt.figure()

ax1 = fig.add_subplot(111)

ax1.set_xlim(-4,4)
ax1.set_ylim(-3,3)

A=np.array([-3,2])
B=np.array([-3,-2])
C=np.array([3,-2])
D=np.array([3,2])

pol = pat.Polygon(xy = [A,B,C,D],
                edgecolor='black',
                facecolor='white',
                linewidth=1.6)

ax1.add_patch(pol)

ax1.text(-3.5,0.0,"4cm",horizontalalignment='center',verticalalignment='center')
ax1.text(0.0,-2.5,"6cm",horizontalalignment='center',verticalalignment='center')

scale=1.1
ax1.text(A[0]*scale,A[1]*scale,"A",fontsize=15,horizontalalignment='center',verticalalignment='center')
ax1.text(B[0]*scale,B[1]*scale,"B",fontsize=15,horizontalalignment='center',verticalalignment='center')
ax1.text(C[0]*scale,C[1]*scale,"C",fontsize=15,horizontalalignment='center',verticalalignment='center')
ax1.text(D[0]*scale,D[1]*scale,"D",fontsize=15,horizontalalignment='center',verticalalignment='center')

P=np.array([-3.0,1.0])

#Zeigen Sie den Bewegungspunkt P an
scale_P=1.2
ax1.plot(P[0],P[1],marker='o',color='black')
ax1.text(P[0]*scale_P,P[1]*scale_P,"P",fontsize=15,horizontalalignment='center',verticalalignment='center')

plt.show()

5. Anzeige △ APD

Erstellen Sie eine dreieckige APD und fügen Sie sie auf die gleiche Weise wie beim Erstellen der rechteckigen ABCD zum Diagramm hinzu. Löschen Sie dann die x- und y-Achse.

%matplotlib nbagg
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as pat

fig = plt.figure()

ax1 = fig.add_subplot(111)

ax1.set_xlim(-4,4)
ax1.set_ylim(-3,3)

A=np.array([-3,2])
B=np.array([-3,-2])
C=np.array([3,-2])
D=np.array([3,2])

pol = pat.Polygon(xy = [A,B,C,D],
                edgecolor='black',
                facecolor='white',
                linewidth=1.6)

ax1.add_patch(pol)

ax1.text(-3.5,0.0,"4cm",horizontalalignment='center',verticalalignment='center')
ax1.text(0.0,-2.5,"6cm",horizontalalignment='center',verticalalignment='center')

scale=1.1
ax1.text(A[0]*scale,A[1]*scale,"A",fontsize=15,horizontalalignment='center',verticalalignment='center')
ax1.text(B[0]*scale,B[1]*scale,"B",fontsize=15,horizontalalignment='center',verticalalignment='center')
ax1.text(C[0]*scale,C[1]*scale,"C",fontsize=15,horizontalalignment='center',verticalalignment='center')
ax1.text(D[0]*scale,D[1]*scale,"D",fontsize=15,horizontalalignment='center',verticalalignment='center')

P=np.array([-3.0,1.0])

scale_P=1.2
ax1.plot(P[0],P[1],marker='o',color='black')
ax1.text(P[0]*scale_P,P[1]*scale_P,"P",fontsize=15,horizontalalignment='center',verticalalignment='center')

#△ APD hinzugefügt
S = pat.Polygon(xy = [A,P,D],
                    edgecolor='black',
                    facecolor='lightgray',
                    linewidth=1.6)

ax1.add_patch(S)

#Löschen Sie den Rahmen
plt.axis('off')

plt.show()

6. Bewegen

Verschieben Sie den Bewegungspunkt P und geben Sie ihn als Animation im GIF-Format aus. Eine Animation wird erstellt, indem die Koordinaten des Bewegungspunkts P jedes Mal nach $ x $ Sekunden aktualisiert und Frame für Frame gezeichnet werden.

%matplotlib nbagg #Erforderlich, um die Animation auf dem Jupiter-Notebook anzuzeigen
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as pat
from matplotlib.animation import PillowWriter,FuncAnimation #Zur Videoerstellung hinzugefügt

fig = plt.figure()
ax1 = fig.add_subplot(111)

A=np.array([-3,2])
B=np.array([-3,-2])
C=np.array([3,-2])
D=np.array([3,2])

scale=1.1
scaleP=1.2

p = pat.Polygon(xy = [A,B,C,D],
                edgecolor='black',
                facecolor='white',
                linewidth=1.6)

def initialize():
    ax1.set_xlim(-4,4)
    ax1.set_ylim(-3,3)
    ax1.add_patch(p)


    ax1.text(A[0]*scale,A[1]*scale,"A",fontsize=15,horizontalalignment='center',verticalalignment='center')
    ax1.text(B[0]*scale,B[1]*scale,"B",fontsize=15,horizontalalignment='center',verticalalignment='center')
    ax1.text(C[0]*scale,C[1]*scale,"C",fontsize=15,horizontalalignment='center',verticalalignment='center')
    ax1.text(D[0]*scale,D[1]*scale,"D",fontsize=15,horizontalalignment='center',verticalalignment='center')

    ax1.text(-3.5,0.0,"4cm",horizontalalignment='center',verticalalignment='center')
    ax1.text(0.0,-2.5,"6cm",horizontalalignment='center',verticalalignment='center')

   
def moveP(x):
    if 0<= x <4:
        return A+np.array([0,-1])*x*velocity
    elif 4<=x <10:
        return B+np.array([1,0])*(x-4)*velocity
    elif 10<= x <14:
        return C+np.array([0,1])*(x-10)*velocity
    else:
        return D
        
velocity=1.0
timestep=0.1

def animate(t):
    plt.cla()
    initialize()
    
    x=timestep*t
    P=moveP(x)
    
    ax1.plot(P[0],P[1],marker='o',color='black')
    ax1.text(P[0]*scaleP,P[1]*scaleP,"P",fontsize=15,horizontalalignment='center',verticalalignment='center')
    
    S = pat.Polygon(xy = [A,P,D],
                    edgecolor='black',
                    facecolor='lightgray',
                    linewidth=1.6)

    ax1.add_patch(S)
    
    plt.axis('off')
    plt.title('x=' + '{:.1f}'.format(x)+'sec')
    
anim = FuncAnimation(fig,animate,frames=140,repeat=True,interval=timestep*1000)
#anim.save("ugokutenP.gif", writer='pillow',fps=10)
plt.show()

ugokutenP02.gif

Recommended Posts

Visualisieren Sie Punkt P, der mit Python funktioniert
Funktioniert mit Python und R.
Visualisieren Sie Python-Paketabhängigkeiten mit graphviz
[Python] Ein Programm, das Treppen mit # erstellt
Eine typisierte Welt, die mit Python beginnt
[Python] Visualisiere und identifiziere langsame Teile mit pytest
FizzBuzz in Python3
Scraping mit Python
Statistik mit Python
Erstellen Sie eine App, die Schüler mit Python errät
Scraping mit Python
Twilio mit Python
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Python beginnt mit ()
Folium: Visualisieren Sie Daten auf einer Karte mit Python
Bingo mit Python
Zundokokiyoshi mit Python
Ein Liner, der mit Python ein Umfangsverhältnis von 10000 Stellen ausgibt
Beispielprogramm, das Syslog mit Python-Protokollierung ausgibt
Formeln, die unter Mathematik mit Python ausführen angezeigt werden
Visualisiere grib2 auf einer Karte mit Python (matplotlib)
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
String-Manipulation mit Python & Pandas, die ich oft benutze
[Python] OpenCV-Umgebungskonstruktion mit Docker (cv2.imshow () funktioniert auch)
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Analysieren und visualisieren Sie JSON (Webanwendung ⑤ mit Python + Flask)
Hinweise zu Python-Kenntnissen, die mit AtCoder verwendet werden können
Der süchtig machende Punkt des "Bayes-Denkens in Python"
Ein Server, der POST-Daten mit flask / python wiedergibt
Ein Memo, dass ich den Datenspeicher mit Python berührt habe
Visualisieren Sie mit OpenCV den Wertschätzungsstatus von Kunstwerken
Artikel, die die Systementwicklung mit Django (Python) ermöglichen _Einführung
Serielle Kommunikation mit Python
Django 1.11 wurde mit Python3.6 gestartet
Primzahlbeurteilung mit Python
Python mit Eclipse + PyDev.
Socket-Kommunikation mit Python
Datenanalyse mit Python 2
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Mit Pandas schnell visualisieren
Python lernen mit ChemTHEATER 03
"Objektorientiert" mit Python gelernt
Führen Sie Python mit VBA aus
Umgang mit Yaml mit Python
Löse AtCoder 167 mit Python
Serielle Kommunikation mit Python
[Python] Verwenden Sie JSON mit Python
Python lernen mit ChemTHEATER 05-1
Lerne Python mit ChemTHEATER
Führen Sie prepDE.py mit python3 aus
1.1 Erste Schritte mit Python
Tweets mit Python sammeln
Binarisierung mit OpenCV / Python
3. 3. KI-Programmierung mit Python