poj 1329 Circle Through Three Points(求三角形外接圆)

模板。。存起来~~

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
struct P
{
	double x,y;
};
struct circl
{
	P r;
	double R;
}ci;
P a,b,c;
double sa,sb,sc,sp;
double dis(P a,P b)
{
	double c=(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
	return sqrt(c);
}
double area()
{

	sa=dis(a,b);
	sb=dis(a,c);
	sc=dis(b,c);
	sp=sa+sb+sc;
	sp/=2;
	return sqrt(sp*(sp-sa)*(sp-sb)*(sp-sc));
}
void cy(P a,P b,P c)
{
	double aaa=area();
	double xa,xb,xc,ya,yb,yc;
	ci.R=sa*sb*sc/aaa/4; 
	double a1=b.x-a.x,b1=b.y-a.y,c1=(a1*a1+b1*b1)/2;  
	double a2=c.x-a.x,b2=c.y-a.y,c2=(a2*a2+b2*b2)/2;  
	double d=a1*b2-a2*b1;  
	ci.r.x=a.x+(c1*b2-c2*b1)/d;  
	ci.r.y=a.y+(a1*c2-a2*c1)/d;  
}
int main()
{
	int step=1;
	while(~scanf("%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y))
	{
		if(!step)
			printf("\n");
		step=0;
		cy(a,b,c);
		printf("(x ");
		if(ci.r.x<0)
			printf("+ %.3lf)^2 + (y ",fabs(ci.r.x));
		else
			printf("- %.3lf)^2 + (y ",fabs(ci.r.x));

		if(ci.r.y<0)
			printf("+ %.3lf)^2 = %.3lf^2",fabs(ci.r.y),ci.R);
		else
			printf("- %.3lf)^2 = %.3lf^2",fabs(ci.r.y),ci.R);
		printf("\n");

		if(ci.r.x>0)
		printf("x^2 + y^2 - %.3lfx",ci.r.x*2);
		else
			printf("x^2 + y^2 + %.3lfx",-ci.r.x*2);

		if(ci.r.y>0)
			printf(" - %.3lfy",ci.r.y*2);
		else
			printf(" + %.3lfy",-ci.r.y*2);
		double ll=ci.r.x*ci.r.x+ci.r.y*ci.r.y-ci.R*ci.R;
		if(ll>0)
			printf(" + %.3lf = 0\n",ll);
		else
			printf(" - %.3lf = 0\n",-ll);

	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值