Seite 1 von 1

ebene Geometrie mit komplexen Zahlen: animierte Zahnräder

Verfasst: Samstag 30. August 2014, 14:43
von MagBen
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.

Re: ebene Geometrie mit komplexen Zahlen: animierte Zahnräde

Verfasst: Samstag 30. August 2014, 15:30
von Sirius3
@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)

Re: ebene Geometrie mit komplexen Zahlen: animierte Zahnräde

Verfasst: Samstag 30. August 2014, 17:18
von MagBen
Danke für die Hinweise, ich habe beides eingearbeitet:

Code: Alles auswählen

p.view(float).reshape(p.size, 2)