Rotirea sistemului de coordonate ajută la rezolvare

Alo Sarcina era de a transforma sistemul de coordonate de-a lungul axelor. Evident, trebuie să folosiți matrice de rotație, multiplicându-le secvențial cu fiecare dintre axe, dar acest lucru nu funcționează deloc pentru mine. Din datele inițiale există coordonate (X, Y, Z) de puncte în sistemul de coordonate adevărat (inițial) și coordonatele acelorași puncte, dar deja în sistemul de coordonate condiționale. Problema este traducerea coordonatelor punctelor de la sistemul de coordonate condițional la cele reale.

Algoritmul pentru soluția mea este după cum urmează:

1) Datorită faptului că orientarea axelor în spațiu este puțin diferită de cele standard (vezi imaginea), trebuie să oglindesc planul ZoX

Din cauza imaginii oglinzii, unghiurile de rotație din jurul axelor vor schimba direcțiile lor în direcțiile opuse.

2) Am calcula incremente de coordonate în fiecare dintre SC-uri care direcționează unghiurile. Diferența lor ne dă unghiurile pe care este necesar să extindem SK condițional.

3) Rotiți în jurul axelor în următoarea ordine: X-Y-Z.

Matricea de rotație în cazul meu ar trebui să arate astfel:

4) După calcularea matricei finale de rotație, îl înmulțesc cu vectorul incrementelor coordonatelor și se însumează cu coordonatele punctului de pornire:

Coordonatele obținute nu doresc să se converge (precizia ar trebui să fie de aproximativ 0,5 cm, dar acestea nu sunt nici măcar similare), ce fac greșit?

Rotirea sistemului de coordonate ajută la rezolvare

Și faci ceea ce știm despre aceste puncte? Este indicat ce punct în ceea ce se traduce - sau pur și simplu sunt multe puncte înainte de rând și multe puncte după, dar cum sunt ele legate, nu există informații? Acestea sunt două sarcini complet diferite, iar al doilea este mult mai dificil, ca și pentru mine.

Numai coordonatele spațiale ale punctelor sunt cunoscute și este indicat care dintre ele este tradus în ceea ce.

Alegeți trei dintre ele care nu se află în același avion. Ce arata matricea care arata trei orbite in aceste trei puncte in primul sistem de coordonate?

Excelent. Primul pas este făcut. În al doilea rând, calculați matricea care va traduce trei puncte în primul sistem de coordonate în trei orci.

Poate că ați vrut să însemnați o matrice pentru aceleași elemente, dar deja în cel de-al doilea SC?

Ei bine, dacă există vectori "înainte" și "după", atunci nu este nimic de făcut. Metodele sunt complet diferite. Aș merge așa ceva:
1. Am luat orice vector, am găsit un produs vector între el "înainte" și "după". Acesta va fi axa noastră. În jurul acestei axe, rotim pentru a aduce vectorul într-o nouă poziție.
2. Acum aruncăm acea axă, iar în jurul acestui vector însuși (deci nu este doborât - este deja în picioare așa cum ar fi trebuit) să se întoarcă pentru a aduce totul într-o nouă poziție. Gasim unghiul cu un alt vector.

1. Nu este clar în ce direcție se obține unghiul de rotație în jurul axei. Trebuie să ne rotim de-a lungul axelor X și Y pentru a combina Z?

2. Și apoi noi, respectiv, pentru fiecare axă propriul unghi pentru a căuta, nu-i așa?

"Colțurile de ghidare" nu au nimic de a face cu viraje succesive. Trebuie să faceți o singură rotire, dar în jurul axei specificate de vector.

Fie ca axa de rotație să fie dată de vectorul unității a și de unghiul de rotație
Apoi matricea de rotație în coordonate carteziene are forma:

Ei bine, dacă există vectori "înainte" și "după", atunci nu este nimic de făcut. Metodele sunt complet diferite. Aș merge așa ceva:
1. Am luat orice vector, am găsit un produs vector între el "înainte" și "după". Acesta va fi axa noastră. În jurul acestei axe, rotim pentru a aduce vectorul într-o nouă poziție.
2. Acum aruncăm acea axă, iar în jurul acestui vector însuși (deci nu este doborât - este deja în picioare așa cum ar fi trebuit) să se întoarcă pentru a aduce totul într-o nouă poziție. Gasim unghiul cu un alt vector.

1. Nu este clar în ce direcție se obține unghiul de rotație în jurul axei. Trebuie să ne rotim de-a lungul axelor X și Y pentru a combina Z?

2. Și apoi noi, respectiv, pentru fiecare axă propriul unghi pentru a căuta, nu-i așa?


Nu întoarceți nici un X. Nu trebuie să întoarceți nici un Y. Nu este nevoie să combinați nici un Z. Trebuie să vă rotiți în jurul unei axe găsită așa cum am spus. În general, aceasta nu este X și nu Y. Matricea de rotație în jurul unei axe arbitrare este la un unghi arbitrar - vezi mai sus. Unghiul este unghiul dintre vectorii "înainte" și "după". O puteți găsi printr-un produs scalar.
Pentru a doua axă, da, unghiul va fi diferit și ar trebui căutat în felul său.

-- mai puțin de un minut în urmă -

Decizia mea este un compromis între dvs. (trei rotații, dar nu funcționează) și ceea ce Munin oferă (o singură etapă, dar este greu de căutat).

Articole similare