回答
有几种方法去做这个。这是一种算法:
让您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