Wyprowadź wzór na kąt theta

Własności funkcji trygonometrycznych i cyklometrycznych. Tożsamości. RÓWNANIA I NIERÓWNOŚCI.
polak7
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 13 lip 2010, o 14:27
Płeć: Mężczyzna
Lokalizacja: 123
Podziękował: 4 razy

Wyprowadź wzór na kąt theta

Post autor: polak7 »

Mam dany układ trzech równań:

\(\displaystyle{
\begin{cases} x=\cos\theta \cdot \sin\phi\\ y=\cos\phi\\ z=\sin\theta \cdot \sin\phi\end{cases}
}\)


Muszę z tego otrzymać wzór na kąt \(\displaystyle{ \theta}\). Zrobiłem to, ale obliczając kąt \(\displaystyle{ \theta}\) z otrzymanego wzoru nie dostaję poprawnego wyniku. Proszę o sprawdzenie czy moje wyprowadzenie wzoru jest poprawne:

Najpierw wyprowadzam wzór na \(\displaystyle{ \phi}\) z drugiego równania:
\(\displaystyle{ \phi=\arccos y}\)

Powyższy wzór jest poprawny, bo daje mi dobre wyniki. Następnie próbuję wyprowadzić wzór na \(\displaystyle{ \theta}\) zaczynając od przekształcenia trzeciego równania:

\(\displaystyle{ \sin\theta= \frac{z}{\sin\phi} }\)
\(\displaystyle{ \theta=\arcsin\left( \frac{z}{\sin\phi} \right) }\)
\(\displaystyle{ \theta=\arcsin\left( \frac{z}{\sin\left( \arccos y\right) } \right) }\)

Gdy obliczam kąt \(\displaystyle{ \theta}\) z powyższego wzoru, to nie otrzymuję poprawnego wyniku. Czy coś jest nie tak z wyprowadzeniem wzoru?
Ostatnio zmieniony 30 cze 2022, o 12:09 przez Jan Kraszewski, łącznie zmieniany 1 raz.
Powód: Punkt 2.7 instrukcji LaTeX-a. Funkcje matematyczne należy zapisywać: sinus - \sin, logarytm - \log, logarytm naturalny - \ln itd.
a4karo
Użytkownik
Użytkownik
Posty: 22173
Rejestracja: 15 maja 2011, o 20:55
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 38 razy
Pomógł: 3748 razy

Re: Wyprowadź wzór na kąt theta

Post autor: a4karo »

A skąd wiesz, że wynik jest nieprawidłowy?

A gdybyś po prostu podzielił trzecie równanie przez pierwsze? (Oczywiście szczegóły są do dopracowania)
polak7
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 13 lip 2010, o 14:27
Płeć: Mężczyzna
Lokalizacja: 123
Podziękował: 4 razy

Re: Wyprowadź wzór na kąt theta

Post autor: polak7 »

Skąd wiem, że wynik jest nieprawidłowy?

Załóżmy, że mam następujące wartości kątów:
\(\displaystyle{ \phi = 2.3561945}\)
\(\displaystyle{ \theta=3.1415925}\)

Obliczmy na ich podstawie x, y, z:
\(\displaystyle{ x=-0.707107}\)
\(\displaystyle{ y=-0.707107}\)
\(\displaystyle{ z=0.000000}\)

Teraz z wyprowadzonych wzorów obliczmy z powrotem kąty:
\(\displaystyle{ \phi=\arccos(-0.707107) = 2.356195}\)
\(\displaystyle{ \theta=\arcsin\left( \frac{0.000000}{\sin\left( \arccos(-0.707107)\right) } \right)=0.000000 }\)

Wyszedł inny kąt \(\displaystyle{ \theta}\) niż był na początku. Kąt \(\displaystyle{ \phi}\) jest taki sam.
Ostatnio zmieniony 30 cze 2022, o 12:47 przez Jan Kraszewski, łącznie zmieniany 1 raz.
Powód: Punkt 2.7 instrukcji LaTeX-a. Funkcje matematyczne należy zapisywać: sinus - \sin, logarytm - \log, logarytm naturalny - \ln itd.
Jan Kraszewski
Administrator
Administrator
Posty: 34125
Rejestracja: 20 mar 2006, o 21:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 3 razy
Pomógł: 5192 razy

Re: Wyprowadź wzór na kąt theta

Post autor: Jan Kraszewski »

No cóż, równoważność

\(\displaystyle{ x=\sin\theta \iff \theta=\arcsin x}\)

jest prawdziwa tylko dla \(\displaystyle{ \theta\in\left[ -\frac{\pi}{2},\frac{\pi}{2}\right]... }\)

JK

edit: poprawa kąta.
polak7
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 13 lip 2010, o 14:27
Płeć: Mężczyzna
Lokalizacja: 123
Podziękował: 4 razy

Re: Wyprowadź wzór na kąt theta

Post autor: polak7 »

Dziękuję. Faktycznie, dla tego zakresu dostaję poprawne wyniki.

Przekształciłem również pierwsze z równań w następujący sposób:
\(\displaystyle{ x=\cos\theta \cdot \sin\phi}\)
\(\displaystyle{ \cos\theta= \frac{x}{\sin\phi} }\)
\(\displaystyle{ \theta=\arccos\left( \frac{x}{\sin\phi} \right) }\)
\(\displaystyle{ \theta=\arccos\left( \frac{x}{\sin\left( \arccos y\right) } \right) }\)

Korzystając z powyższego równania otrzymuję poprawne wyniki w zakresie \(\displaystyle{ (0: \pi]}\).

W jaki sposób wyprowadzić wzór, aby otrzymać prawidłowe wyniki dla zakresu do \(\displaystyle{ 2\pi}\) (może być od \(\displaystyle{ \pi}\) do \(\displaystyle{ 2\pi}\))?
Ostatnio zmieniony 30 cze 2022, o 15:54 przez Jan Kraszewski, łącznie zmieniany 1 raz.
Powód: Punkt 2.7 instrukcji LaTeX-a. Funkcje matematyczne należy zapisywać: sinus - \sin, logarytm - \log, logarytm naturalny - \ln itd. Poprawa wiadomości.
Jan Kraszewski
Administrator
Administrator
Posty: 34125
Rejestracja: 20 mar 2006, o 21:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 3 razy
Pomógł: 5192 razy

Re: Wyprowadź wzór na kąt theta

Post autor: Jan Kraszewski »

Wzory redukcyjne.

JK
polak7
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 13 lip 2010, o 14:27
Płeć: Mężczyzna
Lokalizacja: 123
Podziękował: 4 razy

Re: Wyprowadź wzór na kąt theta

Post autor: polak7 »

Dziękuję. Potrzebuję równania dla zakresu \(\displaystyle{ \left[ 0 : 2\pi\right] }\), czyli mamy tak:

- dla zakresu \(\displaystyle{ [0 : \frac{\pi}{2}) }\) (niestety dla \(\displaystyle{ \frac{\pi}{2} }\) nie działa):
\(\displaystyle{ \theta=\arcsin\left( \frac{z}{\sin(\arccos y)} \right) }\)

- dla zakresu \(\displaystyle{ ( \frac{\pi}{2} : \frac{3\pi}{2}) }\) (znów nie działa dla granicznych wartości):
\(\displaystyle{ \theta=\pi-\arcsin\left( \frac{z}{\sin(\arccos y)} \right) }\)

- dla zakresu \(\displaystyle{ ( \frac{3\pi}{2} : 2\pi] }\) (niestety dla \(\displaystyle{ \frac{3\pi}{2} }\) nie działa):
\(\displaystyle{ \theta=2\pi+\arcsin\left( \frac{z}{\sin(\arccos y)} \right) }\)

Brakuje mi jeszcze dwóch rzeczy:
1) Powyższe wzory nie działają dla granicznych wartości, takich jak: \(\displaystyle{ \frac{\pi}{2}, \frac{3\pi}{2} }\). Co zrobić, aby działały?
2) Powyższe wzory nie działają, gdy \(\displaystyle{ \phi}\) przyjmuje wartość 0 (mamy wtedy dzielenie przez zero: \(\displaystyle{ \sin\theta= \frac{z}{\sin\phi} }\)). Jednakże, mogę obliczyć x, y i z dla \(\displaystyle{ \phi}\) równego 0, więc w drugą stronę też w jakiś sposób powinno udać się uzyskać kąt \(\displaystyle{ \theta}\) na podstawie x, y, z.
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10211
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2359 razy

Re: Wyprowadź wzór na kąt theta

Post autor: Dasio11 »

Jeśli potrzebujesz tych wzorów do jakiegoś programu, to sprawdź czy w języku nie ma funkcji atan2, bo wtedy wystarczy wzór:

\(\displaystyle{ \theta = \operatorname{\text{atan2}} \left( \frac{z}{\sqrt{x^2+z^2}}, \frac{x}{\sqrt{x^2+z^2}} \right)}\)

(przy założeniu że \(\displaystyle{ \sin \phi > 0}\)).
polak7
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 13 lip 2010, o 14:27
Płeć: Mężczyzna
Lokalizacja: 123
Podziękował: 4 razy

Re: Wyprowadź wzór na kąt theta

Post autor: polak7 »

Dasio, dzięki za odpowiedź. Takie wykorzystanie funkcji atan2 nie daje niestety prawidłowych wyników dla całego zakresu.
Awatar użytkownika
Niepokonana
Użytkownik
Użytkownik
Posty: 1546
Rejestracja: 4 sie 2019, o 11:12
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 335 razy
Pomógł: 20 razy

Re: Wyprowadź wzór na kąt theta

Post autor: Niepokonana »

A nie można po prostu skorzystać z jedynki trygonometrycznej dla igreka i potem podstawić?
polak7
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 13 lip 2010, o 14:27
Płeć: Mężczyzna
Lokalizacja: 123
Podziękował: 4 razy

Re: Wyprowadź wzór na kąt theta

Post autor: polak7 »

Niepokonana pisze: 3 lip 2022, o 22:08 A nie można po prostu skorzystać z jedynki trygonometrycznej dla igreka i potem podstawić?
Nie wiem, co by to dało. Potrzebuję wzory dla konkretnych zakresów kąta theta.

Mam jeszcze jeden problem. Otóż, dla pewnego zakresu kąta theta (zakres w pobliżu kąta \(\displaystyle{ \frac{3}{2}\pi }\)) obliczenia nie działają, mimo - wydawałoby się - użycia poprawnych wzorów.
Poniżej rysunek przedstawiający rozkład jednorodny wielu punktów na górnej części sfery:
2022_07_09-13_40_42.png
2022_07_09-13_40_42.png (41.54 KiB) Przejrzano 409 razy
Widać, że w okolicy kąta 270 stopni jest ciemniejsze pole - tam wzory dla części punktów zwracają błąd.

Jednym z takich punktów jest punkt o współrzędnych (pozostałe z nich mają zbliżone współrzędne):
x = 0.00187002
y = 0.99929
z = -0.03776

Wszystkie z wypisanych przeze mnie wzorów zwracają błąd, gdy podstawimy do nich powyższe wartości. Wynika on z tego, że we wzorze pojawia się \(\displaystyle{ \arccos}\) liczby mniejszej (niewiele) od -1. Przykładowo, weźmy wzór:

\(\displaystyle{ \phi=2\pi+\arcsin\left( \frac{z}{\sin(\arccos(y))} \right) }\)

Podstawiamy:
\(\displaystyle{ \phi=2\pi+\arcsin\left( \frac{-0.03776}{\sin\left( \arccos(0.99929)\right) } \right) }\)
\(\displaystyle{ \phi=2\pi+\arcsin\left( \frac{-0.03776}{\sin(0.037685117289918)} \right) }\)
\(\displaystyle{ \phi=2\pi+\arcsin\left( \frac{-0.03776}{0.0376761980565976} \right) }\)
\(\displaystyle{ \phi=2\pi+\arcsin(-1.00222426751437) }\)

Powyższe generuje błąd. Jak sobie z tym poradzić?
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10211
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2359 razy

Re: Wyprowadź wzór na kąt theta

Post autor: Dasio11 »

Problem wynika stąd, że podane liczby nie spełniają \(\displaystyle{ x^2+y^2+z^2=1}\), tj. ten punkt nie leży na sferze jednostkowej. Podany wcześniej przeze mnie wzór:

$$\theta = \operatorname{\text{atan2}} \left( \frac{z}{\sqrt{x^2+z^2}}, \frac{x}{\sqrt{x^2+z^2}} \right)$$

jest odporny na tę sytuację, więc tym bardziej będę zalecał jego użycie. Jeśli potrzebujesz by kąt należał do przedziału \(\displaystyle{ \theta \in [0, 2\pi)}\) zamiast \(\displaystyle{ (-\pi, \pi]}\), wystarczy go odpowiednio przesunąć:

$$\theta_0 = \operatorname{\text{atan2}} \left( \frac{z}{\sqrt{x^2+z^2}}, \frac{x}{\sqrt{x^2+z^2}} \right) \qquad \qquad
\theta = \begin{cases} \theta_0 & \text{jeśli } \theta_0 \ge 0 \\ \theta_0 + 2 \pi & \text{jeśli } \theta_0 < 0 \end{cases}$$

Rzecz w tym, że aby odzyskać kąt punktu o podanych współrzędnych nie da się uniknąć rozważania kilku nieładnych przypadków. Dlatego twórcy bibliotek standardowych swojego czasu namęczyli się umieszczając te przypadki w środku funkcji \(\displaystyle{ \operatorname{\text{atan2}}}\), właśnie po to by dostarczyć zwykłym programistom jednej, eleganckiej funkcji która robi dokładnie to, czego potrzebują.
polak7
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 13 lip 2010, o 14:27
Płeć: Mężczyzna
Lokalizacja: 123
Podziękował: 4 razy

Re: Wyprowadź wzór na kąt theta

Post autor: polak7 »

Dasio, bardzo dziękuję. Atan2 jednak działa. Wcześniej nie przesunąłem przedziału, a nie miałem wtedy jeszcze dostępu do wizualizacji, żeby wychwycić, że działał dla przedziału do \(\displaystyle{ \pi}\).
ODPOWIEDZ