Przekształcanie współrzędnych kątowych.

Polish forum

Moderator: PrzemoF

Forum rules
Regulamin forum i pomocne informacje

WAŻNE! Przeczytaj zanim poprosisz o pomoc
User avatar
arturromarr
Posts: 225
Joined: Sat Jun 24, 2017 9:32 pm

Przekształcanie współrzędnych kątowych.

Postby arturromarr » Fri Oct 18, 2019 6:02 pm

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.
User avatar
kaktus
Posts: 184
Joined: Sun Aug 11, 2019 11:59 am
Location: opolskie
Contact:

Re: Przekształcanie współrzędnych kątowych.

Postby kaktus » Sun Oct 20, 2019 7:05 pm

Witam.
:mrgreen:

Czytam, i jakoś nie dociera do mnie.

Może pokażesz szkic, dla zobrazowania?
wierny padawan mistrza arturromarr
Twórca polskiej wersji Wiki dla FreeCAD.
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest".
User avatar
arturromarr
Posts: 225
Joined: Sat Jun 24, 2017 9:32 pm

Re: Przekształcanie współrzędnych kątowych.

Postby arturromarr » Mon Oct 21, 2019 7:33 am

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.
User avatar
PrzemoF
Posts: 2901
Joined: Fri Jul 25, 2014 4:52 pm
Contact:

Re: Przekształcanie współrzędnych kątowych.

Postby PrzemoF » Mon Oct 21, 2019 7:43 am

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
kwahoo
Posts: 275
Joined: Fri Nov 29, 2013 3:09 pm
Contact:

Re: Przekształcanie współrzędnych kątowych.

Postby kwahoo » Sat Nov 02, 2019 11:58 am

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

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)
Wynikiem jest kwaternion, który pewnie Cię nie satysfakcjonuje, więc możemy spróbować wyciągnąć oś obrotu oraz kąt obrotu:

Code: Select all

rot2.getAxisAngle()[0].getValue() #oś obrotu
(0.5773502588272095, 0.5773502588272095, 0.5773502588272095)
rot2.getAxisAngle()[1] #kat obrotu w radianach
2.0943949222564697
User avatar
arturromarr
Posts: 225
Joined: Sat Jun 24, 2017 9:32 pm

Re: Przekształcanie współrzędnych kątowych.

Postby arturromarr » Wed Nov 06, 2019 9:36 am

kwahoo wrote:
Sat Nov 02, 2019 11:58 am
Najprościej jest użyć Edit->Placement i zaznaczyć Apply incremental changes i potem po kolei obracać o kolejne kąty.
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
Screenshot_20191106_103420.png
manekin Ferdynand Ciosany
Screenshot_20191106_103420.png (111.88 KiB) Viewed 621 times
kwahoo
Posts: 275
Joined: Fri Nov 29, 2013 3:09 pm
Contact:

Re: Przekształcanie współrzędnych kątowych.

Postby kwahoo » Thu Nov 07, 2019 5:32 pm

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.
Nie o o taki efekt Ci chodziło?
calc.png
calc.png (109 KiB) Viewed 604 times
Obrót o 90 stopni wokół Z:

Code: Select all

rot0 = SbRotation(SbVec3f(0, 0, 1), 1.5707963)
Obrót o 90 stopni wokół Y:

Code: Select all

rot1 = SbRotation(SbVec3f(0, 1, 0), 1.5707963)
Jeśli koniecznie chcesz to liczyć samodzielnie, a nie zdawać się na wbudowane biblioteki, to możesz to zrobić tak:
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