StartAlgorytmyGeometria obliczeniowaOkrąg przechodzący przez dane trzy punkty
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?
 
Okrąg przechodzący przez dane trzy punkty
Ocena użytkowników:+++++ / 6
SłabyŚwietny 
Wpisany przez Krzysztof Zajączkowski
środa, 07 stycznia 2009 22:23
Dane są trzy punkty P1, P2 oraz P3, takie że wszystkie trzy nie leżą na jednej prostej (wówczas promień byłby równy nieskończoności, wyliczenie współrzędnej środka okręgu w postaci składowych XY jest niemożliwe) oraz spełniają warunek P1 != P2 oraz P1 != P3 oraz P3 != P2. Możliwe jest wyprowadzenie wzoru na środek okręgu przechodzącego przez te punkty za pomocą równania okręgu:

R2 = ( X - Xs )2 + ( Y - Ys )2


gdzie:
R – promień okręgu
X, Y – współrzędne punktu na obwodzie okręgu
Xs, Ys – współrzędne środka okręgu

Znając punkty P1, P2 oraz P3 można utworzyć trzy następujące równania:

R2 = ( P1.x - Xs )2 + ( P1.y - Ys )2


R2 = ( P2.x - Xs )2 + ( P2.y - Ys )2


R2 = ( P3.x - Xs )2 + ( P3.y - Ys )2


Dwa równania, dwie niewiadome tak więc po odpowiednim przekształceniu można wyznaczyć środek okręgu.

Wzór na okrąg przechodzący przez 3 punkty


Promień to oczywiście odległość od wyznaczonego środka do dowolnego z punktów.

R = sqrt(( P1.x - Xs )2 + ( P1.y - Ys )2)


Przykład okręgu przechodzącego przez 3 puknty


Programy typu CAD wykorzystują tą metodę do wyznaczenia współrzędnych środka okręgu przechodzącego przez trzy wskazane przez użytkownika programu punkty. Metoda ta jest stosowana również w technikach pomiarowych wykorzystujących maszyny współrzędnościowe, w celu określenia położenia, jak i obliczenia promienia mierzonego otworu lub walca przy uwzględnieniu średnicy końcówki pomiarowej.

W dołączonym programie można zmieniać położenie poszczególnych punktów poprzez kliknięcie prawego dla punktu P1, lewego dla punktu P2 oraz środkowego dla punktu P3 przycisku myszy.


Autor Język programowania Komentarz Otwórz Pobierz Ocena
Krzysztof Zajączkowski C/C++
Implementacja w C/C++
Implementacja w C/C++
++++- / 3
 
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:29

Komentarze

 
photo
0 # Rodis 2010-10-23 16:16
Wydaje mi się, że przedstawione w treści artykułu wzory nie działają, jednak te z kodu Krzysztofa Zajączkowskiego są ok.
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
0 # ArturoO 2011-01-24 12:20
Zgadzam się z przedmówcą, wzory podane w artykule nie są poprawne
W załączonym pliku działa OK.
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
0 # Zajączkowski 2011-09-13 05:55
Nie wiem, w którym miejscu się rąbnąłem (o ile się rąbnąłem gdziekolwiek), ale jeżeli tak się stało to na wszelki wypadek wrzucam wzory prosto z programu:

dp.x = 0.5 * ((x2 * x2 * y3 + y2 * y2 * y3 - x1 * x1 * y3 + x1 * x1 * y2 - y1 * y1 * y3 + y1 * y1 * y2 + y1 * x3 * x3 + y1 * y3 * y3 - y1 * x2 * x2 - y1 * y2 * y2 - y2 * x3 * x3 - y2 * y3 * y3) / (y1 * x3 - y1 * x2 - y2 * x3 - y3 * x1 + y3 * x2 + y2 * x1));

dp.y = 0.5 * ((-x1 * x3 * x3 - x1 * y3 * y3 + x1 * x2 * x2 + x1 * y2 * y2 + x2 * x3 * x3 + x2 * y3 * y3 - x2 * x2 * x3 - y2 * y2 * x3 + x1 * x1 * x3 - x1 * x1 * x2 + y1 * y1 * x3 - y1 * y1 * x2) / (y1 * x3 - y1 * x2 - y2 * x3 - y3 * x1 + y3 * x2 + y2 * x1));
Odpowiedz | Odpowiedz z cytatem | Cytować
 

Dodaj komentarz

Kod antysapmowy
Odśwież