不算严格的计算几何,就是各种分类

精度调好就能过,考虑三条边斜着放的所有情况即可

#include<bits/stdc++.h>
#define LL long long
#define ll long long
#define fi first
#define se second
#define mk make_pair
#define pi acos(-1)
#define PII pair<int, int>
#define y1 skldjfskldjg
#define y2 skldfjsklejg
#define g(ans) printf("%.12f\n",ans)
#define bug puts("####") using namespace std; const double eps=1e-6;
const int N = 2e5 + 7;
const int M = 1e7 + 7;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 +7; double a,b,c,w,ans;
double getang(double a,double b,double c)
{
return acos((b*b+c*c-a*a)/(2.0*c*b));
}
void cal()
{
double ang2=getang(c,a,b);
double ang1=getang(b,a,c);
double ang3=getang(a,b,c);
// printf("%.12f %.12f %.12f\n",a,b,c);
if(ang1<=pi/2+eps&&ang2<=pi/2+eps&&a<=w+eps)ans=min(ans,sin(ang1)*c); if(ang1+eps>=pi/2&&c*cos(pi-ang1)+a<=w+eps)ans=min(ans,c*sin(pi-ang1));
double ang4=asin(w/b);
if(ang4+eps>=ang3&&pi/2-ang4+eps>=ang2)ans=min(ans,b*cos(ang4));
double ang5=asin(w/a)+ang1-pi/2;
if(ang5+eps>=0&&ang5<=pi/2+eps&&a>w+eps&&asin(w/a)+eps>=ang2)
ans=min(ans,sin(ang5)*c+a*cos(asin(w/a))); if(ang2+eps>=pi/2&&b*cos(pi-ang2)+a<=w+eps)ans=min(ans,b*sin(pi-ang2));
ang4=asin(w/c);
if(ang4+eps>=ang3&&pi/2-ang4+eps>=ang1)ans=min(ans,c*cos(ang4));
ang5=asin(w/a)+ang2-pi/2;
if(ang5+eps>=0&&ang5<=pi/2+eps&&a>w+eps&&asin(w/a)+eps>=ang1)
ans=min(ans,sin(ang5)*b+a*cos(asin(w/a)));
}
void solve()
{
double d[10];
for(int i=0;i<6;i++)scanf("%lf",&d[i]);
scanf("%lf",&w);
a=sqrt((d[0]-d[2])*(d[0]-d[2])+(d[1]-d[3])*(d[1]-d[3]));
b=sqrt((d[0]-d[4])*(d[0]-d[4])+(d[1]-d[5])*(d[1]-d[5]));
c=sqrt((d[4]-d[2])*(d[4]-d[2])+(d[5]-d[3])*(d[5]-d[3]));
ans=1e18;
cal();
swap(a,b);swap(b,c);cal();
swap(a,b);swap(b,c);cal();
if(ans>=1e18)puts("impossible");
else printf("%.12lf\n",ans);
}
int main()
{
// freopen("b.in","r",stdin);
// freopen("b.out","w",stdout);
int T;scanf("%d",&T);
while(T--)solve();
return 0;
}
/**********************
1
2 4 0 2 7 4 4
6.08
**********************/

hdu6398 计算几何的更多相关文章

  1. ACM/ICPC 之 计算几何入门-叉积-to left test(POJ2318-POJ2398)

    POJ2318 本题需要运用to left test不断判断点处于哪个分区,并统计分区的点个数(保证点不在边界和界外),用来做叉积入门题很合适 //计算几何-叉积入门题 //Time:157Ms Me ...

  2. HDU 2202 计算几何

    最大三角形 Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  3. ACM 计算几何中的精度问题(转)

    http://www.cnblogs.com/acsmile/archive/2011/05/09/2040918.html 计算几何头疼的地方一般在于代码量大和精度问题,代码量问题只要平时注意积累模 ...

  4. hdu 2393:Higher Math(计算几何,水题)

    Higher Math Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. sdut 2603:Rescue The Princess(第四届山东省省赛原题,计算几何,向量旋转 + 向量交点)

    Rescue The Princess Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Several days ago, a b ...

  6. [知识点]计算几何I——基础知识与多边形面积

    // 此博文为迁移而来,写于2015年4月9日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vxaq.html 1.前言 ...

  7. POJ 1106 Transmitters(计算几何)

    题目链接 切计算几何,感觉计算几何的算法还不熟.此题,枚举线段和圆点的直线,平分一个圆 #include <iostream> #include <cstring> #incl ...

  8. TYVJ计算几何

    今天讲了计算几何,发几道水水的tyvj上的题解... 计算几何好难啊!@Mrs.General....怎么办.... 这几道题都是在省选之前做的,所以前面的Point运算啊,dcmp啊,什么什么的,基 ...

  9. 计算几何 平面最近点对 nlogn分治算法 求平面中距离最近的两点

    平面最近点对,即平面中距离最近的两点 分治算法: int SOLVE(int left,int right)//求解点集中区间[left,right]中的最近点对 { double ans; //an ...

随机推荐

  1. 汽车变智能只靠ADAS?麦克风也是主角

    在先进驾驶辅助系统(ADAS)中,结合视觉处理器的CMOS影像感测器已在协助汽车辨识与分类方面发挥关键作用.至于其“听觉”呢? 麦克风也能扮演像摄影机般重要的角色,为自动驾驶车增添更多“智慧”功能吗? ...

  2. ubuntu 更改python3为默认版本

    ubuntu 自带两个python版本,一个是python2一个是python3 默认版本是python2的,想要更改ubuntu python3 为默认版本, 只需要两行命令: sudo updat ...

  3. 20145301赵嘉鑫《网络对抗》Exp8 Web基础

    20145301赵嘉鑫<网络对抗>Exp8 Web基础 基础问题回答 什么是表单? 表单是一个包含表单元素的区域,主要负责数据采集部分.表单元素允许用户在表单中输入信息.一个表单有三个基本 ...

  4. 20145222何志威《网络对抗》- Web安全基础实践

    20145322何志威<网络对抗>Exp9 Web安全基础实践 基础问题回答 1.SQL注入原理,如何防御 SQL注入 就是通过把SQL命令插入到"Web表单递交"或& ...

  5. 20145322何志威《网络对抗技术》Exp6 信息搜集技术

    20145322何志威<网络对抗技术>Exp6 信息搜集技术 实验内容 掌握信息搜集的最基础技能: (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发 ...

  6. 函数引用参数加const

    Fun(const Type& type); 在引用传递的时候,在函数内部改变参数,会改变参数实际值. 加上了const就不能被修改.

  7. define和typedef

    #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错. 所以define后加分号,不然会把分号也会一 ...

  8. SQLSERVER中order by ,group by ,having where 的先后顺序

    SELECT [Name]  FROM [LinqToSql].[dbo].[Student]  where name='***' group  by  name    having (name='* ...

  9. 不同ContentType的post请求

    public static T Invoke<T>(string url, object input, bool requireJSON = true) { using (var clie ...

  10. github issues的操作

    https://help.github.com/en/articles/searching-issues-and-pull-requests 根据 reporter筛选issues https://h ...