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

Polish forum

Moderators: PrzemoF, kaktus

Forum rules
Regulamin forum i pomocne informacje

WAŻNE! Przeczytaj zanim poprosisz o pomoc
Post Reply
User avatar
arturromarr
Posts: 326
Joined: Sat Jun 24, 2017 9:32 pm
Location: Poland

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

Post by arturromarr »

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
Veteran
Posts: 1174
Joined: Sun Aug 11, 2019 11:59 am
Location: opolskie
Contact:

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

Post by kaktus »

Witam.
:mrgreen:

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".
User avatar
arturromarr
Posts: 326
Joined: Sat Jun 24, 2017 9:32 pm
Location: Poland

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

Post by arturromarr »

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
Veteran
Posts: 3520
Joined: Fri Jul 25, 2014 4:52 pm
Contact:

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

Post by PrzemoF »

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

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

Post by kwahoo »

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: 326
Joined: Sat Jun 24, 2017 9:32 pm
Location: Poland

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

Post by arturromarr »

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
manekin Ferdynand Ciosany
manekin Ferdynand Ciosany
Screenshot_20191106_103420.png (111.88 KiB) Viewed 1588 times
User avatar
kwahoo
Posts: 680
Joined: Fri Nov 29, 2013 3:09 pm
Contact:

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

Post by kwahoo »

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 1571 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
Post Reply