Wpisany przez Krzysztof Zajączkowski,
17 stycznia 2009 12:13
Niech istnieją dwa punkty określające linię V1 i V2 oraz okrąg, dla którego dany jest punkt centralny Vc i promień R. Konieczne jest następujące założenie: V1 jest różny od V2. Istnieje możliwość obliczenia punktów V4 oraz V5 będących przecięciami prostej z tym okręgiem. Dowolna prosta może mieć z dowolnym okręgiem dwa punkty przecięcia (wektory V4 oraz V5 są różne), jeden punkt przecięcia (wektory V4 oraz V5 mają te same współrzędne) lub nie mieć punktów przecięcia. W celu obliczenia punktów przecięcia należy zrzutować prostopadle wektor Vc na prostą opisaną wektorami V1 i V2 otrzymując w ten sposób wektor V3. Aby dowiedzieć się więcej o obliczeniach związanych z rzutowaniem prostopadłym punktu na prostą proszę o zapoznanie się z artykułem "Rzutowanie punktu prostopadle na linię". Gdy spełniona jest nierówność | Vc - V3 | ≤ R wtedy okrąg ma jeden lub dwa punkty przecięcia z prostą i należy przystąpić do dalszych obliczeń współrzędnych tych punktów.
Na rysunku poniżej pokazana jest interpretacja graficzna wcześniej wymienionych wektorów oraz linii i okręgu.

Na tym rysunku można wyróżnić dwa trójkąty prostokątne, które są swoim lustrzanym odbiciem względem linii łączącej wektory Vc oraz V3. Długość przeciwprostokątnej tych trójkątów jest znana i wynosi R, natomiast długość jednej z przyprostokątnych można wyznaczyć w następujący sposób:
Mając wektor VP można obliczyć składowe wektorów V4 oraz V5 w następujący sposób:
Na rysunku poniżej pokazana jest interpretacja graficzna wcześniej wymienionych wektorów oraz linii i okręgu.

Na tym rysunku można wyróżnić dwa trójkąty prostokątne, które są swoim lustrzanym odbiciem względem linii łączącej wektory Vc oraz V3. Długość przeciwprostokątnej tych trójkątów jest znana i wynosi R, natomiast długość jednej z przyprostokątnych można wyznaczyć w następujący sposób:
L_1 = |V_c - V_3|
Znając te dwie wartości można obliczyć długość wektora powstałego z różnicy wektorów V3 i V4 oraz V3 i V5 wykorzystując twierdzenie Pitagorasa:
L_2 = \left| V_4 - V_3 \right| = \left| V_3 - V_5 \right| = \sqrt{R^2 - L_1^2}
Teraz należy obliczyć wektor pomocniczy VP = V4 - V3
wykorzystując fakt, że wektor ten jest równoległy do wektora V2 - V1. W związku z powyższym wystarczy jedynie przeskalować uzyskany wektor V2 - V1 tak aby jego długość wynosiła znaną już wartość L2. Operacja ta jest bardzo prosta i wygląda następująco:
V_P = (V_2 - V_1) * \frac{L_2}{\left| V_2 - V_1 \right|}
A więc dzielę wektor V2 - V1 przez jego długość uzyskując dzięki temu wektor o długości 1 i jednocześnie mnożę przez długość L2 uzyskując w ten sposób wektor o tejże długości.Mając wektor VP można obliczyć składowe wektorów V4 oraz V5 w następujący sposób:
V_4 = V_P + V_3\\\\
V_5 = V_3 - V_P
Gdy okrąg ma z linią tylko jeden punkt przecięcia wektor VP ma długość równą 0, w związku z czym punkty przecięcia V4, V5 oraz V3 mają te same współrzędne.
Implementacje
Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
Krzysztof Zajączkowski | C/C++ | .cpp | .cpp | ***** / 10 |
Poprawiony: 27 września 2012 14:41