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.

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.
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:
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:
*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:
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:
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++ | ![]() | ![]() |
![]() ![]() ![]() ![]() / 7 |
Poprawiony: wtorek, 25 maja 2010 22:30



