#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <iostream>
using namespace std; const double eps = 1e-;
const int N = ;
int dcmp(double x)
{
if(abs(x) < eps) return ;
if(x < ) return -;
else return ;
} struct Point{
double x,y;
Point(double x = ,double y = ):x(x),y(y){}
bool operator<(const Point &m)const{
return dcmp(x - m.x) < || (dcmp(x - m.x) == && dcmp(y - m.y) < );
} bool operator==(const Point &m)const{
return dcmp(x - m.x) == && dcmp(y - m.y) == ;
}
}; Point ch[N<<],p[N<<]; typedef Point Vector; Vector operator+(Vector a , Vector b)
{
return Vector(a.x + b.x , a.y + b.y);
} Vector operator-(Point a , Point b)
{
return Vector(a.x - b.x , a.y - b.y);
} Vector operator*(Vector a , double b)
{
return Vector(a.x * b , a.y * b);
} Vector operator/(Vector a , double b)
{
return Vector(a.x / b , a.y/b);
} double Cross(Vector a , Vector b)
{
return a.x * b.y - a.y * b.x;
} Vector GetReverse(Vector a , double rad)
{
double x = a.x * cos(rad) - a.y * sin(rad);
double y = a.x * sin(rad) + a.y * cos(rad);
return Vector(x,y);
}
//计算多边形面积
double ConvexPolygonArea(Point *p , int n)
{
double area = ;
for(int i=;i<n-;i++){
area += Cross(p[i] - p[] , p[i+] - p[]);
}
return area / ;
}
//求形成凸包的最大范围
int ConvexHull(Point *p, int n, Point *ch) //凸包
{
sort(p, p+n);
n = unique(p, p+n) - p; //去重
int m = ;
for(int i = ; i < n; i++)
{
while(m > && Cross(ch[m-]-ch[m-], p[i]-ch[m-]) <= ) m--;
ch[m++] = p[i];
}
int k = m;
for(int i = n-; i >= ; i--)
{
while(m > k && Cross(ch[m-]-ch[m-], p[i]-ch[m-]) <= ) m--;
ch[m++] = p[i];
}
if(n > ) m--;
return m;
}
int main()
{
// freopen("test.in","rb",stdin); int T,n;
double x,y,w,h,_angle; //_angle表示度数,自己还要转化成弧度
scanf("%d",&T);
while(T--){
scanf("%d",&n);
int k=;
double area = ;
for(int i=;i<n;i++)
{
scanf("%lf%lf%lf%lf%lf",&x,&y,&w,&h,&_angle);
area += w*h;
double rad = -_angle * acos(-) / ;
Point o(x,y);
//cout<<" rad: "<<rad<<endl;
p[k++] = GetReverse(Vector(-w/ , h/),rad) + o;
p[k++] = GetReverse(Vector(w/ , h/),rad) + o;
p[k++] = GetReverse(Vector(w/ , -h/),rad) + o;
p[k++] = GetReverse(Vector(-w/ , -h/),rad) + o;
} int m = ConvexHull(p , k , ch);
double sumOfArea = ConvexPolygonArea(ch , m);
double ans = area / sumOfArea * ; printf("%.1f %%\n",ans);
}
return ;
}

UVA 10652 凸包问题的更多相关文章

  1. 简单几何(向量旋转+凸包+多边形面积) UVA 10652 Board Wrapping

    题目传送门 题意:告诉若干个矩形的信息,问他们在凸多边形中所占的面积比例 分析:训练指南P272,矩形面积长*宽,只要计算出所有的点,用凸包后再求多边形面积.已知矩形的中心,向量在原点参考点再旋转,角 ...

  2. UVa 10652 (简单凸包) Board Wrapping

    题意: 有n块互不重叠的矩形木板,用尽量小的凸多边形将它们包起来,并输出并输出木板总面积占凸多边形面积的百分比. 分析: 几乎是凸包和多边形面积的裸题. 注意:最后输出的百分号前面有个空格,第一次交P ...

  3. UVA 10652 Board Wrapping(凸包)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=32286 [思路] 凸包 根据角度与中心点求出长方形所有点来,然后就 ...

  4. Uva 10652 Board Wrapping(计算几何之凸包+点旋转)

    题目大意:给出平面上许多矩形的中心点和倾斜角度,计算这些矩形面积占这个矩形点形成的最大凸包的面积比. 算法:GRAHAM,ANDREW. 题目非常的简单,就是裸的凸包 + 点旋转.这题自己不会的地方就 ...

  5. UVA 10652 Board Wrapping(凸包)

    The small sawmill in Mission, British Columbia, hasdeveloped a brand new way of packaging boards for ...

  6. uva 10652 Board Wrapping (计算几何-凸包)

    Problem B Board Wrapping Input: standard input Output: standard output Time Limit: 2 seconds The sma ...

  7. UVA 10652 Board Wrapping(二维凸包)

    传送门 刘汝佳<算法竞赛入门经典>P272例题6包装木板 题意:有n块矩形木板,你的任务是用一个面积尽量小的凸多边形把它们抱起来,并计算出木板占整个包装面积的百分比. 输入:t组数据,每组 ...

  8. UVa 10652(旋转、凸包、多边形面积)

    要点 凸包显然 长方形旋转较好的处理方式就是用中点的Vector加上旋转的Vector,然后每个点都扔到凸包里 多边形面积板子求凸包面积即可 #include <cstdio> #incl ...

  9. UVa 10256 凸包简单应用

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

随机推荐

  1. java.lang.UnsatisfiedLinkError: E:\TomcatV7_iot\bin\tcnative-1.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform

    启动64位Tomcatv7时报如下错误: java.lang.UnsatisfiedLinkError: E:\TomcatV7_iot\bin\tcnative-.dll: Can't load A ...

  2. Matlab调用C程序 分类: Matlab c/c++ 2015-01-06 19:18 464人阅读 评论(0) 收藏

    Matlab是矩阵语言,如果运算可以用矩阵实现,其运算速度非常快.但若运算中涉及到大量循环,Matlab的速度令人难以忍受的.当必须使用for循环且找不到对应的矩阵运算来等效时,可以将耗时长的函数用C ...

  3. border-1px的实现(stylus)

    当样式像素一定时,因手机有320px,640px等.各自的缩放比差异,所以设备显示像素就会有1Npx,2Npx.为保设计稿还原度,解决就是用media + scale. // stylus语法 bor ...

  4. 转-iOS开发系列--地图与定位

    来自: http://www.cnblogs.com/kenshincui/p/4125570.html#autoid-3-4-0 概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功 ...

  5. ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第四天(非原创)

    文章大纲 一.课程介绍二.今日内容介绍三.参考资料下载四.参考文章 一.课程介绍 一共14天课程(1)第一天:电商行业的背景.淘淘商城的介绍.搭建项目工程.Svn的使用.(2)第二天:框架的整合.后台 ...

  6. Struts2------拦截器和标签库和注解开发

    一.解析Struts2源码中拦截器的执行 客户端请求Action,执行前端控制器,在前端控制器内部创建了Action的代理类,调用代理类的execute方法,在execute方法内部执行ActionI ...

  7. CCF|公共钥匙盒|Java

    import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = ...

  8. Java语法基础-异常处理

    异常处理类层次结构图 检查异常与非检查异常 非检查异常(unckecked exception):Error 和 RuntimeException 以及他们的子类.javac在编译时,不会提示和发现这 ...

  9. Python学习 Day 9 property 多重继承 Mixin

    在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 为了限制score的范围,可以通过一 ...

  10. [安卓开发板]迅为IMX6 四核Android开发板

    工业级核心板-Android开发板 10层高速PCB设计,充分保证电磁兼容 处理器:开发板默认是四核商业扩展级芯片,可根据用户需求更换单核.双核.工业级.汽车级处理器,批量更省成本. 扩展引脚:320 ...