zoukankan      html  css  js  c++  java
  • 给定4根长度的线段,求组成四边形的最大面积

    解题关键:最大面积即4个点都在其外接圆上时的面积。

    $p = (a + b + c + d)/2$

    $s = sqrt {(p - a)(p - b)(p - c)(p - d)}$

    设四边形的四个点分别为A,B,C,D,四条边为a,b,c,d

    $s = frac{1}{2}absin alpha  + frac{1}{2}cdsin eta $

    再由余弦定理,$AC = {a^2} + {b^2} - 2abcos alpha $

    $AC = {c^2} + {d^2} - 2cdcos eta $

    消去AC,$frac{{{a^2} + {b^2} - {c^2} - {d^2}}}{2} = abcos alpha  - cdcos eta $

    联立解得,

    $4{S^2} + frac{1}{4}{({a^2} + {b^2} - {c^2} - {d^2})^2} = {a^2}{b^2} + {c^2}{d^2} - 2abcd(cos alpha cos eta  - sin alpha sin eta ) = {a^2}{b^2} + {c^2}{d^2} - 2abcdcos (alpha  + eta )$

    要使S最大,$cos (alpha  + eta )$取-1;$alpha  + eta  = pi $

    而由圆周角为圆心角的一半,对角和为180度的四边形有外接圆;对角和不是180度的四边形,没有外接圆。

    将$s^2$利用平方差公式进一步化简,最终得到

    ${S^2} = frac{1}{4}({a^2}{b^2} + {c^2}{d^2} + 2abcd) - frac{1}{{16}}{({a^2} + {b^2} + {c^2} + {d^2})^2} = frac{1}{{16}}[(a + b + c - d)(a + b - c + d)(a - b + c + d)(b + c + d - a)]$

    即最顶端的公式,圆内接四边形面积公式

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cstdlib>
    using namespace std;
    typedef long long ll;
    double a[10];
    int main(){
        ll t;
        scanf("%lld",&t);
        ll i;
        for(i=1;i<=t;i++){
            scanf("%lf%lf%lf%lf",a,a+1,a+2,a+3);
            sort(a,a+4);
            if(a[3]>=a[0]+a[1]+a[2]){
                printf("Case %lld: -1
    ",i);
                continue;
            }
            double p=(a[1]+a[2]+a[3]+a[0])/2;
            double s=sqrt((p-a[0])*(p-a[1])*(p-a[2])*(p-a[3]));
            printf("Case %lld: %.6lf
    ",i,s);
            
        }
    } 
  • 相关阅读:
    JS实战 · 表单验证
    JS实战 · 仿css样式选择器
    JS实战 ·  收缩菜单表单布局
    cookie自动登录的实现
    redis 3.2.5单机版安装、使用、systemctl管理Redis启动、停止、开机启动
    yum问题解决
    配置yum镜像源
    shell笔记
    CCIE总结:路由器、交换机
    云主机如何挂在磁盘
  • 原文地址:https://www.cnblogs.com/elpsycongroo/p/6777584.html
Copyright © 2011-2022 走看看