ebene Geometrie mit komplexen Zahlen: animierte Zahnräder

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Bild

In der ebenen Geometrie kann man Formen mit Vektoren konstruieren und verschieben und mit Matrizen drehen.

Code: Alles auswählen

import numpy as np

#Punkt in der Ebene
p = np.array([x,y])

# Drehmatrix
A=np.matrix([[cos(phi), -sin(phi)],
             [sin(phi),  cos(phi)]])
Man kann das alles aber auch mit komplexen Zahlen machen.
Dabei werden Vektoren zu komplexe Zahlen und die Drehmatrix zu einem Drehoperator
(Operator im Sinne der Mathematik und Physik).

Code: Alles auswählen

import numpy as np

#Punkt in der Ebene
p = x + y*1j

# Drehoperator
A=np.exp(1j*phi)
Auf meiner Webseite zeige ich beide Wege zunächst an einem einfachen Beispiel
http://www.magben.de/?h1=mathematik_fue ... e_rechteck
Das blaue Rechteck wird in die Position des roten Rechtecks gedreht und verschoben.
Bild

Danach zeige ich auf
http://www.magben.de/?h1=mathematik_fue ... zahnraeder
Schritt für Schritt wie die Zahnradanimation mit komplexen Zahlen gemacht wird.
a fool with a tool is still a fool, www.magben.de, YouTube
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@MagBen: Dank Matrixmultiplikation läßt sich die Transformation auch einfach als

Code: Alles auswählen

ps = R.dot(p.T).T+d
Damit entfällt die umständliche Schleife.

Zwischen komplexer und 2er-Vektor-Darstellung kann man einfach per »view« hin und herschalten.

Code: Alles auswählen

complex_p = p.view(complex)
vector_p = complex_p.view(float)
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Danke für die Hinweise, ich habe beides eingearbeitet:

Code: Alles auswählen

p.view(float).reshape(p.size, 2)
a fool with a tool is still a fool, www.magben.de, YouTube
Antworten