POJ 1329 求三角形外接圆

简介:

题意给出三角形三点坐标让求出该三角形的外接圆标准方程和一般方程。

这题输出很恶心,注意0.000的时候要输出并且前面的符号为“ + ”,那么外接圆的半径r通过S=(a*b*c)/(4*r)可以求出r=(a*b*c)/(4*S),然后外心坐标是三边垂直平分线的交点,求出两个垂直平分线方程然后可以得出交点坐标。

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef double PointType;
struct point
{
    PointType x,y;
};
PointType TriangleArea(point pi,point pj,point pk) //判断向量PiPj在向量PiPk的顺逆时针方向 +顺-逆0共线
{
    return fabs((pj.x-pi.x)*(pk.y-pi.y)-(pk.x-pi.x)*(pj.y-pi.y))/2;
}
PointType 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;
    double r;
    int f=0;
    while(~scanf("%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y))
    {
        if(f)
            cout<<endl;
        f++;
        r=Dis(a,b)*Dis(a,c)*Dis(b,c)/TriangleArea(a,b,c)/4;
        double c1=(a.x*a.x+a.y*a.y-b.x*b.x-b.y*b.y)/2;
        double c2=(a.x*a.x+a.y*a.y-c.x*c.x-c.y*c.y)/2;
        point centre;
        centre.x=(c1*(a.y-c.y)-c2*(a.y-b.y))/((a.x-b.x)*(a.y-c.y)-(a.x-c.x)*(a.y-b.y));
        centre.y=(c1*(a.x-c.x)-c2*(a.x-b.x))/((a.y-b.y)*(a.x-c.x)-(a.y-c.y)*(a.x-b.x));
        //圆心为Center 半径为r
        cout<<"(x";
        if(centre.x>0)
            cout<<" - ",printf("%.3f",centre.x);
        else if(centre.x<=0)
            cout<<" + ",printf("%.3f",-centre.x);
        cout<<")^2 + (y";
        if(centre.y>0)
            cout<<" - ",printf("%.3f",centre.y);
        else if(centre.y<=0)
            cout<<" + ",printf("%.3f",-centre.y);
        cout<<")^2 = ",printf("%.3f",r),cout<<"^2"<<endl;
        //第二行输出开始
        cout<<"x^2 + y^2";
        if(centre.x>0)
            cout<<" - ",printf("%.3fx",2*centre.x);
        else if(centre.x<=0)
            cout<<" + ",printf("%.3fx",2*-centre.x);
        if(centre.y>0)
            cout<<" - ",printf("%.3fy",2*centre.y);
        else if(centre.y<=0)
            cout<<" + ",printf("%.3fy",2*-centre.y);
        if(centre.x*centre.x+centre.y*centre.y-r*r>=0)
            cout<<" + ",printf("%.3f",centre.x*centre.x+centre.y*centre.y-r*r);
        else if(centre.x*centre.x+centre.y*centre.y-r*r<0)
            cout<<" - ",printf("%.3f",-(centre.x*centre.x+centre.y*centre.y-r*r));
        cout<<" = 0"<<endl;
    }
    return 0;
}


目录
相关文章
|
5月前
|
存储 算法 数据可视化
LeetCode 题目 120:三角形最小路径和
LeetCode 题目 120:三角形最小路径和
|
6月前
|
移动开发
acwing 1843 圆形牛棚
acwing 1843 圆形牛棚
【LeetCode-每日一题】-120. 三角形最小路径和
【LeetCode-每日一题】-120. 三角形最小路径和
|
Java
hdu 2524 矩形A + B
hdu 2524 矩形A + B
36 0
|
存储 Python
LeetCode 120. 三角形最小路径和
给定一个三角形 triangle ,找出自顶向下的最小路径和。
107 0
|
测试技术
AcWing 664. 三角形
AcWing 664. 三角形
73 0
AcWing 664. 三角形
暴力枚举:三角形的组成
题目: 给定一个n个数的数字序列,每个数不超过1e9,有Q此询问,每次询问一个区间是否存在三个数可以组成一 个三角形,输入YES或NO(1<=n,Q<=1e5);
105 0
Leetcode120三角形最小路径和
Leetcode120三角形最小路径和
85 0