algorytm.org

Okrą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
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Okrąg przechodzący przez dane trzy punkty
Ocena użytkowników:***** / 17
SłabyŚwietny 
Wpisany przez Krzysztof Zajączkowski, 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:
R^2 = (X - X_s)^2 + (Y - Y_s)^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:
R^2 = (p_1.x - X_s)^2 + (p_1.y - Y_s)^2\\\\ R^2 = (p_2.x - X_s)^2 + (p_2.y - Y_s)^2\\\\ R^2 = (p_3.x - X_s)^2 + (p_3.y - Y_s)^2\\\\
Dwa równania, dwie niewiadome tak więc po odpowiednim przekształceniu można wyznaczyć środek okręgu.

X_s = \frac{1}{2} * \\\\ \frac{P_2.x^2 * P_3.y + P_2.y^2 * P_3.y - P_1.x^2 * P_3.y - P_1.y^2 * P_3.y} {P_1.y * P_3.x - P_1.y * P_2.x + P_2.y * P_1.x - P_2.y * P_3.x + P_3.y * P_2.x - P_3.y * P_1.x} + \\\\\\ \frac{P_1.x^2 * P_2.y + P_1.y^2 * P_2.y - P_3.x^2 * P_2.y - P_3.y^2 * P_2.y} {P_1.y * P_3.x - P_1.y * P_2.x + P_2.y * P_1.x - P_2.y * P_3.x + P_3.y * P_2.x - P_3.y * P_1.x} + \\\\\\ \frac{P_3.x^2 * P_1.y + P_3.y^2 * P_1.y - P_2.x^2 * P_1.y - P_2.y^2 * P_1.y} {P_1.y * P_3.x - P_1.y * P_2.x + P_2.y * P_1.x - P_2.y * P_3.x + P_3.y * P_2.x - P_3.y * P_1.x}


Y_s = \frac{1}{2} * \\\\ \frac{P_1.x^2 * P_3.x + P_1.y^2 * P_3.x - P_2.x^2 * P_3.x - P_2.y^2 * P_3.x} {P_1.y * P_3.x - P_1.y * P_2.x + P_2.y * P_1.x - P_2.y * P_3.x + P_3.y * P_2.x - P_3.y * P_1.x } + \\\\\\ \frac{P_3.x^2 * P_2.x + P_3.y^2 * P_2.x - P_1.x^2 * P_2.x - P_1.y^2 * P_2.x} {P_1.y * P_3.x - P_1.y * P_2.x + P_2.y * P_1.x - P_2.y * P_3.x + P_3.y * P_2.x - P_3.y * P_1.x } + \\\\\\ \frac{P_2.x^2 * P_1.x + P_2.y^2 * P_1.x - P_3.x^2 * P_1.x - P_3.y^2 * P_1.x} {P_1.y * P_3.x - P_1.y * P_2.x + P_2.y * P_1.x - P_2.y * P_3.x + P_3.y * P_2.x - P_3.y * P_1.x }
Promień to oczywiście odległość od wyznaczonego środka do dowolnego z punktów.

R = \sqrt{(P_1.x - X_s)^2 + (P_1.y - Y_s)^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.


Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Krzysztof ZajączkowskiC/C++
.cpp
.cpp
***** / 5
 
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 sierpnia 2012 20:47
Komentarze
photo
-1 # Michal W. 2012-12-15 10:51
Witam, przyłączam się do dyskusji. Nie znam języków programowania - może się komuś przyda krótsza forma zapisu wzorów jak w temacie:

Moje wyprowadzenie wzoru na współrzędne środka okręgu przechodzącego przez 3 dane punkty:





http://imageshack.us/photo/my-images/849/okrgprzechodzcyprzez3pu.png/
http://imageshack.us/photo/my-images/189/okrgprzechodzcyprzez3pu.png/

Ostateczne WZORY na współrzędne środka okręgu przechodzącego przez 3 dane punkty:



http://imageshack.us/photo/my-images/141/okrgprzechodzcyprzez3pu.png/

wzory te sprawdziłem i działają bezbłędnie w excelu:) pozdrawiam
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz