algorytm.org

Wyznaczenie punktów przecięcia okręgu z prostą



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Wyznaczenie punktów przecięcia okręgu z prostą
Ocena użytkowników:***** / 11
SłabyŚwietny 
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.

Punkty przecięcia okręgu z prostą


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
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Krzysztof ZajączkowskiC/C++
.cpp
.cpp
***** / 10
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język
programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie

Poprawiony: 27 września 2012 14:41
Dodaj komentarz