codeforces 1C. Ancient Berland Circus

二次联通门 : codeforces 1C. Ancient Berland Circus

 

 

 

 

 

/*
    c题 
    封装起来就WA
    拿出来就A了
    无奈 
    
    以一个场地遗迹,呈现多边形,但是不知道具体是几边形,
    只知道他的三个点,求能包含这三个点的最小正多边形的面积:
    
    分别求出三个点之间的距离
    
    先求出他的外接圆,得到外接圆的半径r
    有给定的坐标求出三条边的边长,s_1,s_2,s_3;
    又海伦公式得到三角形的面积: 周长p = (s_1+s_2+s_3)/2.0
    面积等于: S=sqrt(p*(p-s_1)*(p-s_2)*(p-s_3));
    r=s_1*s_2*s_3/(4*S)
    
    得到外接园的半径之后:
   我们再来求出每一条边对应的圆心角a,b,c;
   求出a,b,c圆心角的最大公约数p;
   
    这样我们就可以知道他是边数: 2*pi/p;
    所以得到最小单位的三角形的面积为Area=r*r*sin(p)/2;
    总面积只需再剩上他的边数就可以得到
*/
#include <cstdio>
#include <cmath>
#define Max 5
#define EPS 0.01

#define PI 3.14159265358

/*
class Point_Type
{
    private :
        
        struct Point_Date
        {
            double x;
            double y;
        }
        point[Max];
    
        struct Line_Date
        {
            double k;
            double b;
        }line[Max];
        
        double Get_Gcd (double a, double b)
        {
            return a < EPS ? b : Get_Gcd (fmod (b, a), a);
        }
        
        double Get_k (Point_Date a, Point_Date b)
        {
            return (a.y - b.y) / (a.x - b.x);
        }
        
        double Get_Range (Point_Date a, Point_Date b)
        {
            return sqrt ((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
        }
        
        Point_Date Get_Mid_Point_Pos (Point_Date a, Point_Date b)
        {
            Point_Date now;
            now.x = (a.x + b.x) / 2.0;
            now.y = (a.y + b.y) / 2.0; 
        }
        
        void swap (double &a, double &b)
        {
            double now;
            a = b;
            b = now;
        }
        
    public :
        
        void Insert_Date ()
        {
            for (int i = 1; i <= 3; i++)
            {
                scanf ("%lf", &point[i].x);
                scanf ("%lf", &point[i].y);
            }
        }
        
        void Get_3_line ()
        {
            Point_Date now;
            for (int i = 1; i <= 2; i++)
            {
                now = Get_Mid_Point_Pos (point[i], point[i + 1]);
                line[i].k = -1.0 / Get_k (point[i], point[i + 1]);
                line[i].b = (now.y - line[i].k * now.x);
            }
            now = Get_Mid_Point_Pos (point[3], point[1]);
            line[3].k = -1.0 / Get_k (point[3], point[1]);
            line[3].b = (now.y - line[3].k * now.x);
        }
        
        void MMP ()
        {
//            Get_3_line ();
        }
};

Point_Type Make;
*/

struct Point_Date
{
    double x;
    double y;
}
point[Max];

double Get_Range (Point_Date a, Point_Date b)
{
    return sqrt ((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
    
bool swap (double &a, double &b)
{
    double now = a;
    a = b;
    b = now;
}

double Get_Gcd (double a, double b)
{
    return a < EPS ? b : Get_Gcd (fmod (b, a), a);
}
        
int main (int argc, char *argv[])
{
    for (int i = 1; i <= 3; i++)
    {
        scanf ("%lf", &point[i].x);
        scanf ("%lf", &point[i].y);
    }
    
    double s_1, s_2, s_3;
    s_1 = Get_Range (point[1], point[2]);
    s_2 = Get_Range (point[2], point[3]);
    s_3 = Get_Range (point[3], point[1]);
    double p = (s_1 + s_2 + s_3) / 2.0;
    double S = sqrt (p * (p - s_1) * (p - s_2) * (p - s_3));
    double r = (s_1 * s_2 * s_3) / (4.0 * S);
    
    if (s_1 > s_3)
        swap (s_1, s_3);
    if (s_2 > s_3)
        swap (s_2, s_3);
        
    double G_1 = 2.0 * asin (s_1 / (2.0 * r));
    double G_2 = 2.0 * asin (s_2 / (2.0 * r));
    double G_3 = 2.0 * PI - G_1 - G_2;
    
    p = Get_Gcd (G_1, G_2);
    p = Get_Gcd (p, G_3);
    printf ("%.6lf", (PI * r * r * sin (p)) / p);
    
    return 0;
}

 

转载于:https://www.cnblogs.com/ZlycerQan/p/7340984.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值