空间三点求圆心及半径????

500公里之外 2011-05-23 10:06:59
知道空间中3点坐标
A(X1,Y1,Z1)
B(X2,Y2,Z2)
C(X3,Y3,Z3)
求所在圆的圆心坐标和半径
希望能提供出代码,非常感谢。
...全文
2307 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
bao060301103 2011-11-16
  • 打赏
  • 举报
回复
HPoint pointCenter;
float * plant;
float a, b, c, d;
float A, B, C, D, C1, D1;

plant = ComputePlant(point1, point2, point3);//计算三点确定的平面
a = *(plant++);
b = *(plant++);
c = *(plant++);
d = *(plant++);

if(d != 0){
A = 0.5*(point2.x*point2.x - point1.x*point1.x + point2.y*point2.y - point1.y*point1.y + point2.z*point2.z - point1.z*point1.z) + (point2.z - point1.z)*c/d;
B = 0.5*(point3.x*point3.x - point1.x*point1.x + point3.y*point3.y - point1.y*point1.y + point3.z*point3.z - point1.z*point1.z) + (point3.z - point1.z)*c/d;}
else
{ A = 0.5*(point2.x*point2.x - point1.x*point1.x + point2.y*point2.y - point1.y*point1.y + point2.z*point2.z - point1.z*point1.z);
B = 0.5*(point3.x*point3.x - point1.x*point1.x + point3.y*point3.y - point1.y*point1.y + point3.z*point3.z - point1.z*point1.z);}


if(c != 0)
{
C = point2.x - point1.x - point2.z*a/c + point1.z*a/c;
D = point2.z - point1.y - point2.z*b/c + point1.z*b/c;
C1= point3.x - point1.x - point3.z*a/c + point1.z*a/c;
D1= point3.y - point1.y - point3.z*b/c + point1.z*b/c;
}
else
{
C = point2.x - point1.x - point2.z*a/c + point1.z*a/c;
D = point2.z - point1.y - point2.z*b/c + point1.z*b/c;
C1= point3.x - point1.x - point3.z*a/c + point1.z*a/c;
D1= point3.y - point1.y - point3.z*b/c + point1.z*b/c;
}


pointCenter.x = (A*D1 - B*D)/(C*D1 - C1*D);
pointCenter.y = (A*C1 - C*B)/(D*C1 - C*D1);
pointCenter.z = -(a*pointCenter.x + b*pointCenter.y + d)/c;
bios8086 2011-05-24
  • 打赏
  • 举报
回复
根据解析几何的知识 (x-o1)^2 +(y-o1)^2 =r^2 所以你必须知道三个点 才能确定一个圆形
(x-o1)^2 +(y-o2)^2 +(z-o3)=r^2 您看 要算出这个方程 要几个点 ?
bios8086 2011-05-24
  • 打赏
  • 举报
回复
您到底是确定二维的圆 还是三维的球体啊!
我都被这些叽叽喳喳的搞晕了
shaya02 2011-05-24
  • 打赏
  • 举报
回复
这是思路是对的,有点麻烦
[Quote=引用 16 楼 colinfang2006 的回复:]
最简单的计算方法,就是利用两点连线的中垂线过圆心。
AB中垂线连线方程 AC中垂线连线方程
2个一维方程解出来就行了,不过依然比较复杂。
[/Quote]
shaya02 2011-05-24
  • 打赏
  • 举报
回复
似乎是外接圆
[Quote=引用 18 楼 gpshq 的回复:]
引用 9 楼 wwucw 的回复:
l21 = Math.Sqrt(l2);
l31 = Math.Sqrt(l3);
l11 = Math.Sqrt(l1);
这3点是圆心

+1
就是求圆内接三角形中心【(x1+x2+x3)/3,(y1+y2+y3)/3,(z1+z2+z3)/3】
class MyPoint
{
public int x;
public i……
[/Quote]
shaya02 2011-05-24
  • 打赏
  • 举报
回复
3点就是一个面,哪来什么球,就是求圆心,不是什么球心
500公里之外 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 matrixcl 的回复:]
3点无法确定球心。

首先3点只能确定一个平面。(如果3点有重合或共线,就更不用说了。)
同时3点能确定这个平面上的一个圆。
平面上有一条穿过这个圆心的垂线。垂线上任意点都可以是球心。
[/Quote]

可以这样理解,我这3点就是实际中对一个圆形物体测量得出的3点,这3点在这个物体的边缘上。
500公里之外 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 matrixcl 的回复:]
3点无法确定球心。

首先3点只能确定一个平面。(如果3点有重合或共线,就更不用说了。)
同时3点能确定这个平面上的一个圆。
平面上有一条穿过这个圆心的垂线。垂线上任意点都可以是球心。
[/Quote]

不是球心,是圆心。

还有3点一定在圆上,且不会重合,更不可能在一条直线上。
636f6c696e 2011-05-24
  • 打赏
  • 举报
回复
+1
所以说最后一个方程是:这个圆心坐标在ABC所在平面上
[Quote=引用 26 楼 matrixcl 的回复:]
3点无法确定球心。

首先3点只能确定一个平面。(如果3点有重合或共线,就更不用说了。)
同时3点能确定这个平面上的一个圆。
平面上有一条穿过这个圆心的垂线。垂线上任意点都可以是球心。
[/Quote]
matrixcl 2011-05-24
  • 打赏
  • 举报
回复
3点无法确定球心。

首先3点只能确定一个平面。(如果3点有重合或共线,就更不用说了。)
同时3点能确定这个平面上的一个圆。
平面上有一条穿过这个圆心的垂线。垂线上任意点都可以是球心。
636f6c696e 2011-05-24
  • 打赏
  • 举报
回复
最后个方程是错误的,为什么AB长为半径?
[Quote=引用 20 楼 jq_whh 的回复:]
已知空间上三点A(X1,Y1,Z1),B(X2,Y2,Z2),C(X3,Y3,Z3),
设在A,B,C所在平面上确定的圆的圆心O坐标(X,Y,Z),半径r
则满足下面公式:
(X1-X)²+(Y1-Y)²+(Z1-Z)²=r²
(X2-X)²+(Y2-Y)²+(Z2-Z)²=r²
(X3-X)²+(Y3-Y)²+(Z3-Z)²=r²
(X2-X1)²+(Y2-Y1)²+(Z2-Z1)……
[/Quote]
636f6c696e 2011-05-24
  • 打赏
  • 举报
回复
只不过你运气好,隐式转换正好对了。
换成300 030 -300你的算法就原形毕露了。
首先搞清楚,内接圆心不等于重心好不好?
[Quote=引用 19 楼 gpshq 的回复:]
引用 11 楼 colinfang2006 的回复:
楼上公式有问题
100 010 -100
带进去就不不对
圆心应该是000


带进去 圆心是 0 0 0 刚测试了一下
[/Quote]
636f6c696e 2011-05-24
  • 打赏
  • 举报
回复
你和9楼的算法有半毛钱的关系么?
为什么要+1?
[Quote=引用 18 楼 gpshq 的回复:]
引用 9 楼 wwucw 的回复:
l21 = Math.Sqrt(l2);
l31 = Math.Sqrt(l3);
l11 = Math.Sqrt(l1);
这3点是圆心

+1
就是求圆内接三角形中心【(x1+x2+x3)/3,(y1+y2+y3)/3,(z1+z2+z3)/3】
class MyPoint
{
public int x;
public i……
[/Quote]
500公里之外 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 bios8086 的回复:]
楼主啊!要是你这三个点两两之间的距离相等怎么办
[/Quote]

我题目可能说得不够清楚
补充下:
这已知的3个点一定是在同一个圆上的。
嘻皮士 2011-05-24
  • 打赏
  • 举报
回复
应该和求平面圆心和半径一个道理吧。。。

连接三点生成一个三角形,然后求其外接圆的圆心,求出圆心,即可算出半径。。
bios8086 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 wkxgyg 的回复:]

总算找到一个公式了
http://blog.sina.com.cn/s/blog_648868460100h2b8.html

现在关键现在是如何求这个
三元一次方程组了。。
[/Quote]
哦,你看看人家的博客写的多清楚的意思!唉 你
500公里之外 2011-05-24
  • 打赏
  • 举报
回复
总算找到一个公式了
http://blog.sina.com.cn/s/blog_648868460100h2b8.html

现在关键现在是如何求这个
三元一次方程组了。。
jimh 2011-05-23
  • 打赏
  • 举报
回复
平面3点可以确定一个圆,立体的至少要4个点吧?
636f6c696e 2011-05-23
  • 打赏
  • 举报
回复
最简单的计算方法,就是利用两点连线的中垂线过圆心。
AB中垂线连线方程 AC中垂线连线方程
2个一维方程解出来就行了,不过依然比较复杂。
wanghui0380 2011-05-23
  • 打赏
  • 举报
回复
哎,如果lz非要啥平面上滴

那么,其垂直平分线的交点就是

但是平面上来说,当且仅当3线垂直平分线唯一的时候存在圆,所以这个条件并不是时时满足地
加载更多回复(18)

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧