C++三点确定圆心

double x1 = 2;
	double y1= 0;
	double x2 = 0;
	double y2 = 0;
	double x3 = 1;
	double y3 = 1;
	//避免两点相同
	if(abs(x1-x2)<0.01  && abs(y1-y2)<0.01)
	{
		return;
	}

	if(abs(x1-x3)<0.01  && abs(y1-y3)<0.01)
	{
		return;
	}

	if(abs(x2-x3)<0.01  && abs(y2-y3)<0.01)
	{
		return;
	}

	double centerX;
	double centerY;
	double k1=0;
	double k2=0 ;
	double u=0;
	double v =0;
	//	直线方程AX+BY=C,判断点(x3,y3)是否在直线上
	double A=(y2-y1);
	double B=(x1-x2);
	double C=(x1*y2-y1*x2);
	double C1=A*x3+B*y3;
	if(C==C1)
	{
		return ;
	}
	///////////////////////////////////////////////
	if(x1==x2)
	{
		x1=x1+0.000001;
	}
	if(x1==x3)
	{
		x1=x1+0.000001;
	}

	u = (x1*x1 - x2*x2 + y1*y1 - y2*y2)/(2*x1 -2*x2);			
	v= (x1*x1 - x3*x3 + y1*y1 - y3*y3)/(2*x1 -2*x3);
	k1 = (y1-y2)/(x1-x2);
	k2 = (y1-y3)/(x1-x3);
	centerX = v - (u-v)*k2/(k1-k2);
	centerY = (u-v)/(k1-k2);
	cout<<centerX<<"   ,   "<<centerY<<endl;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值