poj 1329 Circle Through Three Points

此题目的输出好恶心..WA一次之后,发现输出的时候,有些情况没考虑到,重新再敲代码,以至于代码敲了老长老长...还有A过去了。

代码如下:

#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
struct point
{
    double x;
    double y;
};
struct Line
{
    point a;
    point b;
};
point interection(Line u,Line v)
{
    point res=u.a;
    double k=((u.a.x-v.a.x)*(v.a.y-v.b.y)-(u.a.y-v.a.y)*(v.a.x-v.b.x))/((u.a.x-u.b.x)*(v.a.y-v.b.y)-(u.a.y-u.b.y)*(v.a.x-v.b.x));
    res.x+=(u.b.x-u.a.x)*k;
    res.y+=(u.b.y-u.a.y)*k;
    return res;
}
point circumcenter(point a,point b,point c)// 求三角形外心的模板 
{
    Line u,v;
    u.a.x=(a.x+b.x)/2;
    u.a.y=(a.y+b.y)/2;
    u.b.x=u.a.x-a.y+b.y;
    u.b.y=u.a.y+a.x-b.x;

    v.a.x=(a.x+c.x)/2;
    v.a.y=(a.y+c.y)/2;
    v.b.x=v.a.x-a.y+c.y;
    v.b.y=v.a.y+a.x-c.x;
    return interection(u,v);
}
double dis(point a,point b)
{
    return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int main()
{
    point a,b,c;
    while(scanf("%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y)!=EOF)
    {
        point ans;
        ans=circumcenter(a,b,c);
        double d=dis(ans,a);
        if(ans.x>0&&ans.y>0)printf("(x - %.3lf)^2 + (y - %.3lf)^2 = %.3lf^2\n",ans.x,ans.y,d);
        else if(ans.x>0&&ans.y<0)printf("(x - %.3lf)^2 + (y + %.3lf)^2 = %.3lf^2\n",ans.x,fabs(ans.y),d);
        else if(ans.x<0&&ans.y>0)printf("(x + %.3lf)^2 + (y - %.3lf)^2 = %.3lf^2\n",fabs(ans.x),ans.y,d);
        else if(ans.x<0&&ans.y<0)printf("(x + %.3lf)^2 + (y + %.3lf)^2 = %.3lf^2\n",fabs(ans.x),fabs(ans.y),d);
        else if(ans.x==0&&ans.y>0)printf("x^2 + (y - %.3lf)^2 = %.3lf^2\n",ans.y,d);
        else if(ans.x==0&&ans.y<0)printf("x^2 + (y + %.3lf)^2 = %.3lf^2\n",fabs(ans.y),d);
        else if(ans.x>0&&ans.y==0)printf("(x - %.3lf)^2 + y^2 = %.3lf^2\n",ans.x,d);
        else if(ans.x<0&&ans.y==0)printf("(x + %.3lf)^2 + y^2 = %.3lf^2\n",fabs(ans.x),d);
        else if(ans.x==0&&ans.y==0)printf("x^2 + y^2 = %.3lf^2\n",d);

        if(ans.x>0&&ans.y>0)
        {
            printf("x^2 + y^2 - %.3lfx - %.3lfy",2*ans.x,2*ans.y);
            if(ans.x*ans.x+ans.y*ans.y<d*d)printf(" - %.3lf = 0\n\n",d*d-ans.x*ans.x-ans.y*ans.y);
            else if(ans.x*ans.x+ans.y*ans.y>d*d)printf(" + %.3lf = 0\n\n",ans.x*ans.x+ans.y*ans.y-d*d);
            else printf("= 0\n\n");
        }
        else if(ans.x>0&&ans.y<0)
        {
            printf("x^2 + y^2 - %.3lfx + %.3lfy",2*ans.x,2*fabs(ans.y));
            if(ans.x*ans.x+ans.y*ans.y<d*d)printf(" - %.3lf = 0\n\n",d*d-ans.x*ans.x-ans.y*ans.y);
            else if(ans.x*ans.x+ans.y*ans.y>d*d)printf(" + %.3lf = 0\n\n",ans.x*ans.x+ans.y*ans.y-d*d);
            else printf(" = 0\n\n");
        }
        else if(ans.x<0&&ans.y>0)
        {
            printf("x^2 + y^2 + %.3lfx - %.3lfy",2*fabs(ans.x),2*ans.y);
            if(ans.x*ans.x+ans.y*ans.y<d*d)printf(" - %.3lf = 0\n\n",d*d-ans.x*ans.x-ans.y*ans.y);
            else if(ans.x*ans.x+ans.y*ans.y>d*d)printf(" + %.3lf = 0\n\n",ans.x*ans.x+ans.y*ans.y-d*d);
            else printf(" = 0\n\n");
        }
        else if(ans.x<0&&ans.y<0)
        {
            printf("x^2 + y^2 + %.3lfx + %.3lfy",2*fabs(ans.x),2*fabs(ans.y));
            if(ans.x*ans.x+ans.y*ans.y<d*d)printf(" - %.3lf = 0\n\n",d*d-ans.x*ans.x-ans.y*ans.y);
            else if(ans.x*ans.x+ans.y*ans.y>d*d)printf(" + %.3lf = 0\n\n",ans.x*ans.x+ans.y*ans.y-d*d);
            else printf(" = 0\n\n");
        }
        else if(ans.x==0&&ans.y>0)
        {
            printf("x^2 + y^2 - %.3lfy",2*ans.y);
            if(ans.y*ans.y>d*d)printf(" + %.3lf = 0\n\n",ans.y*ans.y-d*d);
            else if(ans.y*ans.y<d*d)printf(" - %.3lf = 0\n\n",d*d-ans.y*ans.y);
            else printf(" = 0\n\n");
        }
        else if(ans.x==0&&ans.y<0)
        {
            printf("x^2 + y^2 + %.3lfy",2*fabs(ans.y));
            if(ans.y*ans.y>d*d)printf(" + %.3lf = 0\n\n",ans.y*ans.y-d*d);
            else if(ans.y*ans.y<d*d)printf(" - %.3lf = 0\n\n",d*d-ans.y*ans.y);
            else printf(" = 0\n\n");
        }
        else if(ans.x==0&&ans.y==0)
        {
            printf("x^2 + y^2 - %.3lf = 0\n\n",d*d);
        }
        else if(ans.x>0&&ans.y==0)
        {
            printf("x^2 + y^2 - %.3lfx",2*ans.x);
            if(ans.x*ans.x>d*d)printf(" + %.3lf = 0\n\n",ans.x*ans.x-d*d);
            else if(ans.y*ans.y<d*d)printf(" - %.3lf = 0\n\n",d*d-ans.x*ans.x);
            else printf(" = 0\n\n");
        }
        else if(ans.x<0&&ans.y==0)
        {
            printf("x^2 + y^2 + %.3lfx",2*fabs(ans.x));
            if(ans.x*ans.x>d*d)printf(" + %.3lf = 0\n\n",ans.x*ans.x-d*d);
            else if(ans.x*ans.x<d*d)printf(" - %.3lf = 0\n\n",d*d-ans.x*ans.x);
            else printf(" = 0\n\n");
        }
    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值