zoukankan      html  css  js  c++  java
  • Area in Triangle /// oj10229

    题目大意:

    给出三角形的三个顶点 再给一条绳(绳长不超过三角形周长)

    求绳子在三角形中能围出的最大面积

    题解链接 http://blog.sina.com.cn/s/blog_6a46cc3f0100tujn.html

    多边形和圆 周长相同时 圆的面积更大 

    而当绳长超过三角形的内接圆时 

    沿着边放 对应三角的三个位置围成三段圆弧 

    使得三段圆弧能围成一个圆时 面积就能更大

    而此时这个小圆也会与小三角形内接 与大圆和大三角形相似

    计算比例 k=(小三角周长-小内接圆周长)/(大三角周长-大内接圆周长)

    那么此时 绳围面积=S大三角-(S小三角-S小内接圆)

    按比例可得到小内接圆半径 可得 S小内接圆

    又S大三角=底*高 -> 缩小k比例 -> S小三角=(k*底)*(k*高)=k*k*S大三角

    #include<cstdio>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const double PI=acos(-1.0);
    int main()
    {
        double a,b,c,d;
        int tcase=0;
        while(~scanf("%lf%lf%lf%lf",&a,&b,&c,&d)) {
            if(a+b+c+d==0) break;
            double L=a+b+c, l=L*0.5;
            double area=sqrt(l*(l-a)*(l-b)*(l-c));
            double R=area*2.0/L, ans;
            if(a+b+c<=d) ans=area;
            else if(2.0*PI*R>=d) ans=d*d/(4.0*PI);
            else {
                double k=(L-d)/(L-2.0*PI*R);
                R*=k; // 得到小内接圆半径
                ans=area-k*k*area+PI*R*R;
            }
            printf("Case %d: %.2f
    ",++tcase,ans);
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    使用递归遍历目录
    Isseck 定位文件流
    二:C标准库文件I/O函数
    IPC进程通信
    操作系统知识总结
    Makefile简单使用
    人际交往
    AIX ksh补全命令
    java.lang.IllegalArgumentException: Wildcard string cannot be null or empty.
    WEB项目实现QQ在线推广功能
  • 原文地址:https://www.cnblogs.com/zquzjx/p/9986529.html
Copyright © 2011-2022 走看看