Board logo

标题: 问题已解决 [打印本页]

作者: 桑子    时间: 2008-6-10 12:07     标题: 问题已解决

理论是知道的

假设点 p1(x1,y1) p2(x2,y2) p3(x3,y3)

计算 p1, p2 的中垂线方程 f1,

计算 p2, p3 的中垂线方程 f2,

计算 f1 ,f2 方程的交点,就是圆心

圆心和任意一点的距离就是半径

不过我要做批量计算

怎么着能输入三点坐标,直接圆半径就出来了?

[ 本帖最后由 桑子 于 2008-6-10 14:32 编辑 ]
作者: 桑子    时间: 2008-6-10 12:09

平时都是用excel这种简单的东西,不知道该怎么对付这个问题了
作者: 马克    时间: 2008-6-10 12:55

QQ,
MSN也行
作者: schaefer    时间: 2008-6-10 13:00

还是可以用Exel啊,编辑公式,然后批量计算啊
作者: 桑子    时间: 2008-6-10 13:20

原帖由 schaefer 于 2008-6-10 14:00 发表
还是可以用Exel啊,编辑公式,然后批量计算啊


唉,耐心研究公式,一个个输入去了:noway:
作者: 桑子    时间: 2008-6-10 13:25

设任意三点坐标(a1,b1),(a2,b2),(a3,b3)
其中任意二点坐标(a1,b1),(a2,b2)
连接
取其中点
不妨设a1>=a2,b1>=b2
则中点m(a1-a2,b1-b2)
y=kx+b
代入(a1,b1),(a2,b2)
得解析式y1=kx+b
将直线旋转90度
得解析式y2=-1/k*x + c
代入中点m(a1-a2,b1-b2),得解析式y2
再连接另二点
同理,得解析式y3
y2=y3
kx+b=-1/k*x+c
得圆心o(x,y2)
又因为半径到圆周等长
所以
运用两点距离公式得
r=根号(x-a1)^2 + (y2-b1)^2

公式:
x0=((y3-Y1)*(Y2*Y2-Y1*Y1+X2*X2-X1*X1)+(Y2-Y1)*(Y1* Y1 - y3*y3+X1*X1-x3*x3))/(2*(X2-X1)*(y3-Y1)-2*(x3-X1)*(Y2-Y1))

y0 = ((x3 - X1) * (X2 * X2 - X1 * X1 + Y2 * Y2 - Y1 * Y1) + (X2 - X1) * (X1 * X1 - x3 * x3 + Y1 * Y1 - y3 * y3)) / (2 * (Y2 - Y1) * (x3 - X1) - 2 * (y3 - Y1) * (X2 - X1))

r=sqr((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0))

公式搜索出来了,哪个数学好的帮我看看,x0,y0是不是圆心的计算公式,是的话我就在excel里慢慢输入去了:blackman:
作者: 桑子    时间: 2008-6-10 13:33

赞一下google,以后偶一定先认真搜索再上来提问

帖上来,做个备份好了

#include<iostream.h>
#include<math.h>

int main()
{
   int x1,y1,x3,y3;
   double a,b,c,d,e,f;
   double r,k1,k2,x,y,x2,y2;
   cout<<"请输入x1,y1,x2,y2,x3,y3"<<endl;
   cin>>x1>>y1>>x2>>y2>>x3>>y3;
   if((y1==y2)&&(y2==y3))
{
   cout<<"三点不构成圆!"<<endl;
   return 0;
}
   if((y1!=y2)&&(y2!=y3))
{
   k1=(x2-x1)/(y2-y1);
   k2=(x3-x2)/(y3-y2);
}
   if(k1==k2)
{
   cout<<"三点不构成圆!"<<endl;
   return 0;
}
   a=2*(x2-x1);
   b=2*(y2-y1);
   c=x2*x2+y2*y2-x1*x1-y1*y1;
   d=2*(x3-x2);
   e=2*(y3-y2);
   f=x3*x3+y3*y3-x2*x2-y2*y2;
   x=(b*f-e*c)/(b*d-e*a);
   y=(d*c-a*f)/(b*d-e*a);
   cout<<"圆心为("<<x<<","<<y<<")"<<endl;
   r=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
   cout<<"半径为"<<r<<endl;
   return 0;
}
作者: 驴子    时间: 2008-6-10 13:48

则中点m(a1-a2,b1-b2)


中点不是((a1+a2)/2, (b1+b2)/2 )么?
作者: 桑子    时间: 2008-6-10 13:51

你说a和b的值么?

还没有仔细看,打算两个对比一下,看看哪个对
作者: 驴子    时间: 2008-6-10 13:53

其中任意二点坐标(a1,b1),(a2,b2)
连接
取其中点
不妨设a1>=a2,b1>=b2
则中点m(a1-a2,b1-b2)

两点中点坐标是这两点坐标的平均值,不是差值
作者: 桑子    时间: 2008-6-10 13:54

:fury: :fury:

真是的,看来还是得自己推导一遍,一点都偷不得懒:fullbeard:
作者: STROM    时间: 2008-6-11 08:15

原帖由 马克 于 2008-6-10 13:55 发表
QQ,
MSN也行

找买他了鸡也行




欢迎光临 人在德国 社区 (http://rs238848.rs.hosteurope.de/bbs/) Powered by Discuz! 7.2