StartAlgorytmyGeometria obliczeniowaWyznaczenie 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
Kanał artykuły
Kanał implementacje
Kanał komentarze
Kanał forum


Bookmarki









Sonda
Implementacji w jakim języku programowania poszukujesz?
 
Wyznaczenie punktów przecięcia okręgu z prostą
Ocena użytkowników:++--- / 4
SłabyŚwietny 
Wpisany przez Krzysztof Zajączkowski
sobota, 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:

L1 = | Vc - V3 |


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:

L2 = | V4 - V3 | = | V3 - V5 | = sqrt( R2 - L12 )

*sqrt - pierwiastek kwadratowy (ang. square root)

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:

VP = ( V2 - V1 ) * ( L2 / | V2 - V1| )


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:

V4 = VP + V3
V5 = V3 - VP


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.



Autor Język programowania Komentarz Otwórz Pobierz Ocena
Krzysztof Zajączkowski C/C++
Implementacja w C/C++
Implementacja w C/C++
++--- / 7
 
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: wtorek, 25 maja 2010 22:30

Dodaj komentarz

Kod antysapmowy
Odśwież