Rotationen und Verschiebungen von Koordinaten

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
muskelkater
User
Beiträge: 2
Registriert: Freitag 15. April 2016, 13:37

Hallo,

ich arbeite daran im Rahmen meiner Projektarbeit ein Python-Skript zu schreiben, dass es mir ermöglicht, Bauteile virtuell miteinander zu montieren und an allen möglichen Konfigurationen Messungen vorzunehmen um die beste Konfiguration zu ermitteln. Es gibt vier Bauteile, die ich auf wenige Vektoren reduzieren konnte. Ein Bauteil besteht für mich also aus einer handvoll Vektoren, die die Position im Raum (veränderlich) und die Geometrie des Bauteils (natürlich unveränderlich) beschreiben.

Konkret bedeutet das: ich möchte ein Bauteil (= mehrere Vektoren, zB [a1,b1,c1], [a2,b2,c2], ... ) an eine bestimmte Stelle schieben und es ausrichten. Mathematisch kann ich mir folgenden Weg vorstellen:

1. einen Vektor [a1,b1,c1] an eine Position schieben [x,y,z]
2. alle anderen Vektoren exakt genau so verschieben
3. alle Vektoren um eine Achse (die nicht im Ursprung liegt, sondern in [x,y,z]) drehen, mit dem Ziel, dass eine Normale (meinetwegen [n1,n2,n3]) zu [a1,b1,c1] dann identisch ist zu einer vorgegebenen Normale in Punkt [x,y,z] (um ihr einen Namen zu geben: [N1,N2,N3])
4. den letzten Freiheitsgrad bestimmen durch eine Drehung aller Vektoren [a1,b1,c1], ... in der durch den Punkt [x,y,z,] der Normalen [N1,N2,N3] Ebene in eine bestimmte Richtung

Punkt 1 und 2 kann ich bestimmt auch selbst schreiben, mit den folgenden Punkten bin ich etwas überfordert. Leider hatte ich in der Vergangenheit noch nicht die Gelegenheit mich ausführlich mit Python zu beschäftigen. Nun mit solch einer Aufgabe einzusteigen ist sicherlich nicht ganz einfach, aber ich stelle mich gerne dieser Herausforderung.

Bisher habe ich nach Codes oder vorgefertigten Funktionen gesucht, die mich bei meinem Vorhaben unterstützen (zB Rotationen um eine Achse), bin aber leider nicht fündig geworden - solche Funktionen gibt es für Rotationen um eine Achse, die durch den Ursprung [0,0,0] geht, aber nicht für eine 'freie' Achse. Seit einigen Tagen versuche ich eine entsprechende Funktion in mein Programm zu integrieren. Bisher leider erfolglos. Nun hoffe ich auf Eure Hilfe. Ich bin ganz offen für verschiedene Lösungsansätze, möchte nur mein Ziel der Bauteilrepositionierung erreichen. Es sollen übrigens ca. 120 000 Positionen konfiguriert werden und ich hoffe, die Rechenzeit auf unter eine Stunde begrenzen zu können.

Ich freue mich auf Eure Ideen!
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@muskelkater: das Problem hat nichts mit Python zu tun, sondern mit Mathematik. Rotiert wird mit einer Rotationsmatrix um den Ursprung. Ist der Rotationspunkt nicht im Urpsrung, so wird entsprechend alles verschoben und danach zurückgeschoben:

Code: Alles auswählen

p' = (p - r) * R + r
Wobei r der Punkt ist, um den rotiert werden soll und R die Rotationsmatrix. Das kann man jetzt natürlich auch ausmultiplizieren:

Code: Alles auswählen

b = r * (1 - R)
p' = p * R + b
Bei vielen Vektoren bietet es sich in Python an, das Rechnen mit numpy-Matrizen zu erledigen.
muskelkater
User
Beiträge: 2
Registriert: Freitag 15. April 2016, 13:37

Tatsächlich. Wie lange es wohl gedauert hätte, bis ich darauf gekommen wäre... Nunja, jetzt konnte ich es erfolgreich implementieren. Vielen Dank!
Antworten