Mathematik für Ingenieure mit Python

Mathematische Grundlagen
www.grund-wissen.de/mathematik
WinPython
Alles was man für Mathematik mit Python unter Windows braucht.
winpython.sourceforge.net
Download WinPython
Python-Code
Transformation mit Vektoren und Drehmatrix: ebene_geometrie_rechteck_vektor.py
Transformation mit komplexen Zahlen: ebene_geometrie_rechteck_complex.py
Was hat's gebracht?
Zunächst wurde eine einfache ebene Transformation mit Vektoren und Drehmatrix durchgeführt. Dann haben wir gesehen, wie die gleiche Transformation mit komplexen Zahlen durchgeführt werden kann.
Wie geht's weiter?
Als nächstes werden zwei Zahnräder mit komplexen Zahlen konstruiert und animiert.

Ebene Geometrie mit komplexen Zahlen

Drehung und Verschiebung eines Rechtecks

Das blaue Rechteck soll um den Ursprung um 35° gedreht werden und danach mit dem Verschiebevektor d=(1.7,0.4) verschoben werden, sodass es die Position des roten Rechtecks einnimmt. Rotation und Verschiebung werden im Folgenden als Transformation bezeichnet.

Zunächst wird die Aufgabe mit 2D Vektoren und einer 2x2 Drehmatrix gelöst. Danach wird gezeigt, wie die 2D-Vektoren durch komplexe Zahlen und die Drehmatrix durch den komplexen Drehoperator ersetzt werden können.

Drehung und Verschiebung eines Rechtecks mit komplexen Zahlen

Transformation mit 2D Vektoren und 2x2 Drehmatrix

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon

# Eckpunkte p des Rechtecks
p = np.array([[0.,0.],[3.,0.],[3.,1.],[0.,1.]])

# Drehmatrix
phi = np.radians(35) #35 GRAD, aber phi in RAD
R = np.matrix([[np.cos(phi), -np.sin(phi)],
               [np.sin(phi),  np.cos(phi)]])

# Verschiebung
d = np.array([1.7,.4])

# Transformation
# Eckpunkte p' (p-Strich) des transformierten Rechtecks
ps = R.dot(p.T).T+d

# Plotten
plt.figure()
ax = plt.gca()

# Color in RGB-alpha
# alpha: Durchsichtigkeit
ax.add_patch(Polygon(p , color=(0,0,1,0.8))) 
ax.add_patch(Polygon(ps, color=(1,0,0,0.6))) 

# immer "equal" wenn Geometrie dargestellt werden soll
ax.set_aspect("equal") 

plt.xlim(-1, 5)
plt.ylim(-1, 4)
plt.show()

Transformation mit komplexen Zahlen

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon

# Eckpunkte p des Rechtecks
p = np.array([0.+0.j,3.+0.j,3.+1.j,0.+1.j])

# Drehoperator
phi = np.radians(35) #35 GRAD, aber phi in RAD
R = np.exp(1j*phi)

# Verschiebung
d = 1.7+.4j

# Transformation
# Eckpunkte p' (p-Strich) des transformierten Rechtecks
ps = R*p + d

# Plotten
# p und ps sind komplexe Arrays mit 4 Elementen.
# p und ps muessen aber als 4x2 Array mit reellen Werten 
# an Polygon uebergeben werden.
plt.figure()
ax = plt.gca()

# Color in RGB-alpha
# alpha: Durchsichtigkeit
ax.add_patch(Polygon(p.view( float).reshape(p.size, 2), color=(0,0,1,0.8))) 
ax.add_patch(Polygon(ps.view(float).reshape(ps.size,2), color=(1,0,0,0.6))) 

# immer "equal" wenn Geometrie dargestellt werden soll
ax.set_aspect("equal") 

plt.xlim(-1, 5)
plt.ylim(-1, 4)
plt.show()