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;
}


目录
相关文章
【LeetCode-每日一题】-120. 三角形最小路径和
【LeetCode-每日一题】-120. 三角形最小路径和
|
存储 Python
LeetCode 120. 三角形最小路径和
给定一个三角形 triangle ,找出自顶向下的最小路径和。
91 0
|
存储
三角形最小路径和(动态规划)
给定一个三角形 triangle ,找出自顶向下的最小路径和。
83 0
三角形最小路径和(动态规划)
AcWing 664. 三角形
AcWing 664. 三角形
51 0
AcWing 664. 三角形
|
C语言
LeetCode 动态规划之三角形最小路径和
LeetCode 动态规划之三角形最小路径和
182 0
LeetCode 动态规划之三角形最小路径和
20天刷题计划-120. 三角形最小路径和
给定一个三角形 triangle ,找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。
巴斯卡三角形(杨辉三角)
巴斯卡三角形(杨辉三角)
152 0
巴斯卡三角形(杨辉三角)
Leetcode120三角形最小路径和
Leetcode120三角形最小路径和
67 0