Cześć,
Zna ktoś wzory do przeliczenia współrzędnych kątowych z obrotu względem trzech osi współrzędnych na te, które są podawane w sekcji Placement czyli Angle i Axis?
Chodzi mi, żeby wyliczyć z wartości trzech kątów na jeden kąt i trzy wektory.
Przekształcanie współrzędnych kątowych.
- arturromarr
- Posts: 326
- Joined: Sat Jun 24, 2017 9:32 pm
- Location: Poland
Re: Przekształcanie współrzędnych kątowych.
Witam.
Czytam, i jakoś nie dociera do mnie.
Może pokażesz szkic, dla zobrazowania?
Czytam, i jakoś nie dociera do mnie.
Może pokażesz szkic, dla zobrazowania?
Twórca polskiej wersji Wiki dla FreeCAD, współwórca polskiej wersji GUI.
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest".
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest".
- arturromarr
- Posts: 326
- Joined: Sat Jun 24, 2017 9:32 pm
- Location: Poland
Re: Przekształcanie współrzędnych kątowych.
Jak w praktyce chcę obrócić element o np. 30 stopni wokół osi X, o 5 stopni wokół Y i 15 stopni wokół Z, to co mam wpisać w sekcji Placement elementu gdzie jest jeden kąt i trzy przemieszczenia.
Wzory mi są potrzebne do automatycznego przeliczania tych wielkości.
Wzory mi są potrzebne do automatycznego przeliczania tych wielkości.
Re: Przekształcanie współrzędnych kątowych.
Jeżeli dobrze kojarzę to położenie definiuje się:
- położeniem
- osią (wektor)
- obrotem wokół tej osi
Tu jest trochę na ten temat [1]. Jest kilka funkcji pomocniczych. Jeżeli nie znajdziesz tam tego czego szukasz to napisz.
[1] https://forum.freecadweb.org/viewtopic.php?t=576
- położeniem
- osią (wektor)
- obrotem wokół tej osi
Tu jest trochę na ten temat [1]. Jest kilka funkcji pomocniczych. Jeżeli nie znajdziesz tam tego czego szukasz to napisz.
[1] https://forum.freecadweb.org/viewtopic.php?t=576
Re: Przekształcanie współrzędnych kątowych.
Najprościej jest użyć Edit->Placement i zaznaczyć Apply incremental changes i potem po kolei obracać o kolejne kąty.
Jeśli jednak chcesz wyliczyć finalny obrót w jakimś skrypcie, to musisz pomnożyć kolejne rotacje
Wynikiem jest kwaternion, który pewnie Cię nie satysfakcjonuje, więc możemy spróbować wyciągnąć oś obrotu oraz kąt obrotu:
Jeśli jednak chcesz wyliczyć finalny obrót w jakimś skrypcie, to musisz pomnożyć kolejne rotacje
Code: Select all
from pivy.coin import SbRotation
from pivy.coin import SbVec3f
rot0 = SbRotation(SbVec3f(0, 0, 1), 1.5707963) #oś, kąt w radianach
rot1 = SbRotation(SbVec3f(0, 1, 0), 1.5707963)
rot2 = rot0 * rot1 #kolejność ma znaczenie
rot2.getValue() #wyciągamy kwaternion
(0.4999999701976776, 0.5, 0.5, 0.5000000596046448)
Code: Select all
rot2.getAxisAngle()[0].getValue() #oś obrotu
(0.5773502588272095, 0.5773502588272095, 0.5773502588272095)
rot2.getAxisAngle()[1] #kat obrotu w radianach
2.0943949222564697
- arturromarr
- Posts: 326
- Joined: Sat Jun 24, 2017 9:32 pm
- Location: Poland
Re: Przekształcanie współrzędnych kątowych.
Tak właśnie nie mogę, chociaż dokładnie o ten efekt mi chodzi.
Potrzebuję to w formie równań, które będę mógł użyć do automatycznego wyliczania położenia elementów projektu.
Konkretnie, cel jest taki, żeby w wygodny sposób w szkicowniku móc ustawić w dowolny sposób tego "kolegę":
- Attachments
-
- manekin Ferdynand Ciosany
- Screenshot_20191106_103420.png (111.88 KiB) Viewed 1589 times
Re: Przekształcanie współrzędnych kątowych.
Nie o o taki efekt Ci chodziło?arturromarr wrote: ↑Wed Nov 06, 2019 9:36 am
Potrzebuję to w formie równań, które będę mógł użyć do automatycznego wyliczania położenia elementów projektu.
Obrót o 90 stopni wokół Z:
Code: Select all
rot0 = SbRotation(SbVec3f(0, 0, 1), 1.5707963)
Code: Select all
rot1 = SbRotation(SbVec3f(0, 1, 0), 1.5707963)
1) skonwertować kolejne obroty oś-kąt do macierzy http://www.euclideanspace.com/maths/geo ... /index.htm
2) pomnożyć kolejne macierze
3) wyciągnąć finalną oś-obrót z wynikowej macierzy http://www.euclideanspace.com/maths/geo ... /index.htm