Eulerovy úhly
Uživatel | Příspěvek |
Martin Kopecký ![]() ![]() Poslat zprávu | Profil |
Datum:
24.11. 2016
| Zobrazeno:
9662x Konfigurace CATIA: Catia/Delmia V5-6R2014 Text dotazu: oPosition.GetComponents iAxisComponentsArray V produktu v TagGroup vytvořím Tag, nastavím pozici oTag.SetXYZ iAxisComponentsArray(9), iAxisComponentsArray(10), iAxisComponentsArray(11) Následuje nastavení orientace Tagu, kde zatím nevím jak správně postupovat. SetYPR V prvním kroku jsem získal matici transformace, ze které potřebuji získat Eulerovy úhly. Jak zjišťuji, tak to není tak jednoduché a jednoznačné, jak jsem si myslel. Víte někdo jak správně spočítat úhly a zorientovat Tag? Napadá vás jiný postup jak vytvořit Tag totožný s AbsoluteAxisem Partu (např. přímým volání příkazu "c:Frame Type")? |
Martin Kopecký ![]() ![]() Poslat zprávu | Profil |
[#6039]
| Publikováno:
25.11. 2016 - 14:06 Malá oprava, respektive upřesnění.
Úhly, kterými se zadává orientace Tagu, nejsou Eulerovy, jako je známe z PartDesignu - z - x' - z'', ale Yaw, Pitch, Roll. Tedy rotace kolem os - x - y - z. |
Ing Jan Cinert ![]() ![]() Poslat zprávu | Profil |
[#6040]
| Publikováno:
25.11. 2016 - 14:11 Dobrý den,
v příloze dokument o výpočtu Eulerových úhlů. Kdysi jsem psal makro, kdy jsem potřeboval vypočítat úhly pro definici Axis systému, znal jsem jen normované vektory jednotlivých os. Tenkrát jsem si s tím poradil a tohle mi dost pomohlo. Podívejte se na to, třeba najdete co hledáte. |
Martin Kopecký ![]() ![]() Poslat zprávu | Profil |
[#6043]
| Publikováno:
29.11. 2016 - 09:48 Uživatel odpovídá na příspěvek #6040:
Díky, pomohlo to. Konvence yaw - pitch - roll mi trochu zamotala hlavu. Různé zdroje uvádějí pořadí a názvy osa/uhel odlišně. Pořád nevím jestli to je jen zvolené názvosloví nebo jestli to má hlubší smysl. Dále mě zarazilo, jak vlastně vypočítat matici rotace. Podle většiny zdrojů rotace x-y-z se spočítá RzRyRx. V dokumentu od Vás rotaci z-y-x počítají zase jako RzRyRx. Já mám rotaci x-y-z, tak jsem zkusil RxRyRz a konečně mi vycházejí správná čísla a všechno jde pěkně odvodit. Doufám, že ošetřením kvadrantů zajistím už 100 % správné výsledky. Což mě přivádí k dalšímu dotazu... Mám funkci atan2, kde mi vstupují 2 hodnoty Public Function Atan2(y As Double, x As Double) As Double Jako y a x zadávám hodnoty z matice rotace, což jsou desetinná číška s des. čárkou. To způsobí chybu. Hodnotu y=0,707 funkce bere jako y=0, x=707. Poradíte, co mám změnit? |
Ing Jan Cinert ![]() ![]() Poslat zprávu | Profil |
[#6044]
| Publikováno:
29.11. 2016 - 15:06 V tomhle případě by mohlo stačit převést na správný typ - double, např. takhle
x = CDbl(input.ToString.Replace(",",".")) |
Martin Kopecký ![]() ![]() Poslat zprávu | Profil |
[#6045]
| Publikováno:
30.11. 2016 - 18:37 "CDbl" mi končí chybou mismatch.
Převést na text, nahradit čárku tečkou a pak převést zpět na číslo jsem už zkoušel pomocí "Val". Výsledek byl stejný jako na začátku - číslo s des. čárkou. V makru jsem to obešel. Hodnoty x a y přiřazuji před voláním fce atan2. Jinak po ošetření kvadrantů se zdá, že už makro funguje správně. Kdyby někdo řešil podobný problém, tak jsem našel šikovný dokument (s ošetřením kvadrantů a pseudocody): |
Uživatel nepřihlášen
Pro zobrazení obsahu stránky / provedení akce (vytvoření nového téma, napsání odpovědi do diskuse apod.) musíte být přihlášeni.