zoukankan      html  css  js  c++  java
  • 牛客暑期五几何题

    题意:在长为w高为h的矩形中放入一个边长为a,b,c的三角形,求三角形的三个顶点,精度为1e-6,(输出的顶点时任意顶点)

    思路:一个三角形中至少有两个角度是锐角,则可以将通过枚举选择一个合适的点放在原点处,还可以通过旋转三角形,让另外一个边固定在矩形的边上,可以固定在与原点相邻的边上或者是相隔的边上再通过余弦定理求出角度从而确定第三个顶点;

    出现 nan(not a number)情况:在acos中出现-1和1范围之外的数。往往是括号少加了

    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    
    using namespace std;
    const double eps=1e-6;//精度16就开到6
    struct Point
    {
        double x,y;
        Point(){}
        Point(double _x,double _y):x(_x),y(_y){}
    };
    Point p[5];
    int w,h;
    int a,b,c;
    bool seg(int  a,int b,int c,int _z,int _y,int _x)
    {
        p[_z]=Point(0,0);
        if(c<=w)
        {
            p[_y]=Point(c,0);
        }
        else
        {
            p[_y].x=w;
            p[_y].y=sqrt((c*c-w*w));
        }
        double A=acos((b*b+c*c-a*a)*1.0/(2*b*c));余弦定理,通过cmath 还没遇到会出现精度问题,使劲用cmath来求角度就行了,
        double B=atan(p[_y].y/w);
        A+=B;
       // printf("%f
    ",(b*b+c*c-a*a)*1.0/2*b*c);
        //printf("%f
    ",B);
        p[_x].y=b*sin(A);
        p[_x].x=b*cos(A);
        if(p[_x].y>(0.0-eps)&&p[_x].x>(0.0-eps)&&p[_x].x<(w+eps)&&(p[_x].y<h+eps))//避免出现-0.0情况,以及精度限制问题
       {
            printf("%.12f %.12f %.12f %.12f %.12f %.12f
    ",p[0].x , p[0].y, p[1].x, p[1].y, p[2].x, p[2].y);
            return true;
        }
        return false;
    }
    
    int main ()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
        scanf("%d%d%d%d%d",&w,&h,&a,&b,&c);
        if(seg(b, c, a, 1,0,2))continue;//通过分函数实现枚举点,通过传递参变量实现顶点的映射
        if(seg(a, b, c, 2,1,0))continue;
        if(seg(a, c, b, 2,0,1))continue;
        if(seg(b, a, c, 1,2,0))continue;
        if(seg(c, b, a, 0,1,2))continue;
        if(seg(c, a, b, 0,2,1))continue;
        }
        return 0;
    }

    枚举的时候,key:是求解最小的求解空间。

  • 相关阅读:
    Team饭来了团队作业3需求改进与系统设计
    2016012006崔啸寒 散列函数的应用及其安全性
    结对项目之四则运算
    《构建之法》第四章,第十七章所感
    2016012006小学四则运算练习软件项目报告
    读《构建之法》之一,二,十六章有感
    追梦软件路,愿不忘初心
    信息安全作业5 有关散列函数安全性的知识扩展
    结对作业:四则运算网页版
    Week4-作业1:阅读笔记与思考
  • 原文地址:https://www.cnblogs.com/zwx7616/p/11287779.html
Copyright © 2011-2022 走看看