回答
有幾種方法去做這個。這是一種算法:
讓您COORDS
A = {XA,YA}
B = {XB,YB}
C = {XC,YC}
d = {xd,yd}
計算AB線和BC線的中點
mid_AB = {(XA + XB)/ 2,(YA + YB)/ 2}
mid_BC = {(的xB + XC)/ 2,(YB + YC)/ 2}
找到線AB和BC
的斜坡slope_AB =(YB-YA)/(XB-XA)
slope_BC =(YC-YB)/(XC-XB)
通過運行
構建線中點PERPENDICULAR AB和BC(謝謝Yves捕捉負)
Slope_perp_AB!= - (slope_AB)^( - 1)
Slope_perp_BC = - (slope_BC)^( - 1)
***與Slope_perp_AB線通過mid_AB運行
***與Slope_perp_BC線通過mid_BC
運行設置兩個方程彼此相等,解決找到交集! 這給你點d = {xd,yd} !!!
計算半徑和角度現在微不足道的中心點d!
注意,垂線的斜率是-1/m,而不是+ 1/m。您應該更喜歡線性方程的隱式表達式,因爲它們更具各向同性並且適用於水平/垂直。 –
很棒!謝謝。我會更新帖子。 – Joshua
你能寫一個證明嗎?IOW定義xA,yA,xB,yB,xC,yC,xd,yd顯示'所有步驟來獲得xd,yd COORDS?我不確定'Slope_perp'是什麼意思除以-1?或到-1的冪?我不明白「設置兩個等式相等」的數學原理 – DarkPh03n1X
步驟1
查找AB和BC的垂直平分線。
第2步
找到這些線相交的點。
你會發現點將是你想要的圓的中心。
步驟3
計算從您在步驟2中發現中間的三個點,這將是半徑的圓你一個的距離。
注意點A,B和C不得在同一行。在執行步驟1至3之前,必須先檢查該步驟。
對此的解決方案與「非超定系統的最佳擬合圈」幾乎相同。由於您有三個點,它們正好位於以圓心(0,0)
(給定)爲圓心的圓弧上,所以系統可以精確求解,而不需要最小二乘法逼近。
Finding the Center of a Circle Given 3 Points
Date: 05/25/2000 at 00:14:35
From: Alison Jaworski
Subject: finding the coordinates of the center of a circle
Hi,
Can you help me? If I have the x and y coordinates of 3 points - i.e.
(x1,y1), (x2,y2) and (x3,y3) - how do I find the coordinates of the
center of a circle on whose circumference the points lie?
Thank you.
Date: 05/25/2000 at 10:45:58
From: Doctor Rob
Subject: Re: finding the coordinates of the center of a circle
Thanks for writing to Ask Dr. Math, Alison.
Let (h,k) be the coordinates of the center of the circle, and r its
radius. Then the equation of the circle is:
(x-h)^2 + (y-k)^2 = r^2
Since the three points all lie on the circle, their coordinates will
satisfy this equation. That gives you three equations:
(x1-h)^2 + (y1-k)^2 = r^2
(x2-h)^2 + (y2-k)^2 = r^2
(x3-h)^2 + (y3-k)^2 = r^2
in the three unknowns h, k, and r. To solve these, subtract the first
from the other two. That will eliminate r, h^2, and k^2 from the last
two equations, leaving you with two simultaneous linear equations in
the two unknowns h and k. Solve these, and you'll have the coordinates
(h,k) of the center of the circle. Finally, set:
r = sqrt[(x1-h)^2+(y1-k)^2]
and you'll have everything you need to know about the circle.
This can all be done symbolically, of course, but you'll get some
pretty complicated expressions for h and k. The simplest forms of
these involve determinants, if you know what they are:
|x1^2+y1^2 y1 1| |x1 x1^2+y1^2 1|
|x2^2+y2^2 y2 1| |x2 x2^2+y2^2 1|
|x3^2+y3^2 y3 1| |x3 x3^2+y3^2 1|
h = ------------------, k = ------------------
|x1 y1 1| |x1 y1 1|
2*|x2 y2 1| 2*|x2 y2 1|
|x3 y3 1| |x3 y3 1|
Example: Suppose a circle passes through the points (4,1), (-3,7), and
(5,-2). Then we know that:
(h-4)^2 + (k-1)^2 = r^2
(h+3)^2 + (k-7)^2 = r^2
(h-5)^2 + (k+2)^2 = r^2
Subtracting the first from the other two, you get:
(h+3)^2 - (h-4)^2 + (k-7)^2 - (k-1)^2 = 0
(h-5)^2 - (h-4)^2 + (k+2)^2 - (k-1)^2 = 0
h^2+6*h+9 - h^2+8*h-16 + k^2-14*k+49 - k^2+2*k-1 = 0
h^2-10*h+25 - h^2+8*h-16 + k^2+4*k+4 - k^2+2*k-1 = 0
14*h - 12*k + 41 = 0
-2*h + 6*k + 12 = 0
10*h + 65 = 0
30*k + 125 = 0
h = -13/2
k = -25/6
Then
r = sqrt[(4+13/2)^2 + (1+25/6)^2]
= sqrt[4930]/6
Thus the equation of the circle is:
(x+13/2)^2 + (y+25/6)^2 = 4930/36
- Doctor Rob, The Math Forum
http://mathforum.org/dr.math/
參考
- 尋找鑑於三點一個圈,訪問的2014年4月1日的中心,
<http://mathforum.org/library/drmath/view/55239.html>
你有三個方程來確定三個未知XM,YM和R,
(xA-xM)^2+(yA-yM^2) = R^2
等從B中減去甲方程和C方程給出
2*(xB-xA)*xM+2*(yB-yA)*yM = xB^2-xA^2+yB^2-yA^2
2*(xC-xA)*xM+2*(yC-yA)*yM = xC^2-xA^2+yC^2-yA^2
通過求解這2×2線性系統,您可以獲得圓的中心點,插入任何原始方程都可得出半徑。
圓的中心是等距離的三個已知點:
(X-Xa)^2+(Y-Ya)^2 = (X-Xb)^2+(Y-Yb)^2 = (X-Xc)^2+(Y-Yc)^2
減去來自所述第二與第三所述第一構件,我們重新組合後得到:
2(Xa-Xb) X + 2(Ya-Yb) Y + Xb^2+Yb^2-Xa^2-Ya^2 = 0
2(Xa-Xc) X + 2(Ya-Yc) Y + Xc^2+Yc^2-Xa^2-Ya^2 = 0
該線性系統在兩個未知數中的兩個方程很容易用克萊默法則解決。
半徑和角度可以通過圍繞中心笛卡爾到極變換中找到:
R= Sqrt((Xa-X)^2+(Ya-Y)^2)
Ta= atan2(Ya-Y, Xa-X)
Tc= atan2(Yc-Y, Xc-X)
但是你還是會錯過一兩件事:什麼是弧形的相關部分?小於或大於半圈?從Ta
到Tb
或從Tb
到2 Pi
到Ta + 2 Pi
,還是什麼?答案似乎不像看起來那麼明顯,試試吧(因爲三個角度Ta
,Tb
和Tc
都未定義爲2 Pi
的倍數,您無法對它們進行排序)!
提示:考慮三角形ABC區域的正負號,正好是系統行列式的一半。它會告訴你B是在AC的左邊還是右邊。
有一個鮮爲人知的結果通過3點給人一種圓的隱式方程:
|Z X Y 1|
|Za Xa Ya 1|
|Zb Xb Yb 1| = 0
|Zc Xc Yc 1|
,我們已經爲簡明起見定義Z:= X^2 + Y^2
。
計算的3×3的未成年人,我們發展成:
M00 Z + M10 X + M20 Y + M30 = 0
和,歸一化後,我們得到了通常的二度方程:
X^2 + Y^2 + 2U X + 2V Y + W = 0
這可以被改寫爲:
(X - U)^2 + (Y - V)^2 = U^2 + V^2 - W
立即給中心(U, V) = (-M10/2.M00, -M20/2.M00)
和半徑R^2 = U^2 + V^2 - M30/M00
。
- 1. 找到指定的角度和半徑
- 2. 給定中心座標,半徑和掃描角度,如何計算圓弧的終點座標?
- 3. 在給定角度和半徑的圓上找到點
- 4. 如何計算給定中心的終點加上半徑和角度?
- 5. 查找與給定的中心點,半徑和程度
- 6. 如何從半徑和內角度在Silverlight中繪製弧線
- 7. 如何畫圓弧半徑和啓動和停止角度
- 8. 從給定點和半徑計算經度和緯度
- 9. 如何從3點和半徑找到球體中心?
- 10. 在給定半徑和中心的圓中查詢OrientDB的緯度 - 經度對
- 11. 查找半徑和給定兩點的圓心
- 12. 找到一個給定的半徑
- 13. 找到一個點的原點,角度和半徑的位置
- 14. 找到具有半徑和角度的點
- 15. Java中的邊界框算法只有中心點和半徑
- 16. 從上面3點計算圓心和半徑
- 17. 給定2個點上的圓和角度,如何找到中心(在Python中)?
- 18. 如何使用3個給定點計算arcTo()的半徑?
- 19. 從給定的緯度,經度和半徑值中查找java中的最大和最小緯度和緯度
- 20. 計算給定兩個向量的橢圓弧開始和結束角度
- 21. 計算半徑,並找到半徑內的所有匹配表
- 22. borderTopLeftRadius和其他3角落半徑同行不工作
- 23. 在Java中計算圓弧角度
- 24. 確定給定半徑算法內的點
- 25. 獲取附近的景點,給定經度,緯度和半徑
- 26. 在弧度讀角度,並將其轉換以度/分/秒
- 27. 轉換x和y到角弧度
- 28. 將R中的給定半徑內的點合併爲質心
- 29. 如何根據Google Maps API中的給定邊界和中心找到球體的半徑
- 30. 定製的tableView:圓角半徑,減少寬度和陰影
如果所有3個點形成等邊三角形,您將如何解決問題?我不確定問題是否足夠好。 –
@Mark然後您的圓弧是完整圓的2/3 – ibrabeicker
只要點不在同一條線上,該圓就是明確定義的。但是,您認爲弧的「開始」和「結束」是任意的。哦,當然還有'r == r'。 – Thomas