Rotationen und Verschiebungen von Koordinaten
Verfasst: Freitag 15. April 2016, 14:29
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!
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!