由任意3点计算得出圆心坐标,考虑斜率不存在的情况

下面给出由三角计算圆心坐标的代码

思路:根据任意两点的垂直平分线角方程,考虑斜率不存在的情况。

/************************************************************************/
/*由三点计算圆心坐标                                                     */
/************************************************************************/
bool CntCalBy3Pts(const double x1, const double y1,
		  const double x2, const double y2,
		  const double x3, const double y3,
		  double& cnt_x,   double& cnt_y)
	{
	//step1:计算中点坐标
	double mid_x12 = (x1 + x2)/2;
	double mid_y12 = (y1 + y2)/2;
	double mid_x23 = (x2 + x3)/2;
	double mid_y23 = (x2 + x3)/2;
	//step2:计算垂直平方线斜率
	double k1 = 0, k2 = 0;
	//case1:pt1,pt2组成线段斜率不存在
	if (!(y1 - y2))
		{
		cnt_x = mid_x12;
		k2 = -((x2 - x3)/(y2 - y3));
		cnt_y = k2 * mid_x12 + mid_y23 - k2 * mid_x23;
		return true;
		}
	//case2:pt2,pt3组成的线段斜率不存在
	else if (!(y2 - y3))
		{
		cnt_x = mid_x23;
		k1 = -((x1 - x2)/(y1 - y2));
		cnt_y = k1 * mid_x23 + mid_y12 - k1 * mid_x12;
		return true;
		}
	//case3:两条线段斜率均存在
	else
		{
		k1 = -((x1 - x2)/(y1 - y2));
		k2 = -((x2 - x3)/(y2 - y3));
		if (k1 == k2)
			{
			return false;
			}
		double b1 = mid_y12 - k1 * mid_x12;
		double b2 = mid_y23 - k2 * mid_x23;
		cnt_x = (b2 - b1)/(k1 - k2);
		cnt_y = k1 * cnt_x + b1;
		return true;
		}
	}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值