题目大意:给出平面上许多矩形的中心点和倾斜角度,计算这些矩形面积占这个矩形点形成的最大凸包的面积比。

  算法:GRAHAM,ANDREW。

  题目非常的简单,就是裸的凸包 + 点旋转。这题自己不会的地方就是点旋转,另外,Andrew 算法还没有调试出来 。有一个非常细节的地方:给出的矩形有N个,但是点有4*N个。

  直接上代码:GRAHAM

 #include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cmath> using namespace std; int N,pc,top;
double Tot_s = ,area = ; struct data{
double x,y; data(double x=,double y=):x(x),y(y) {}
};
data pt[],st[];
double cross(data a,data b,data td){
return (a.x-td.x)*(b.y-td.y) - (a.y-td.y)*(b.x-td.x);
}
double dis(data a,data b){
return sqrt(pow(a.x-b.x,)+pow(a.y-b.y,));
}
bool cmp(data a,data b){
if(cross(a,b,pt[]) == )
return dis(a,pt[]) < dis(b,pt[]);
return cross(a,b,pt[]) > ;
}
data Rotate(data a,double rad){
return data(a.x*cos(rad)-a.y*sin(rad),a.x*sin(rad)+a.y*cos(rad));
}
data operator + (data a,data b){
return data(a.x+b.x,a.y+b.y);
}
double torad(double deg){
return deg/*acos(-);//acos(-1) = PI
}
void Graham(){
int k = ;data tp;
top = ;
for(int i = ;i < *N;++ i)
if(pt[k].x>pt[i].x || (pt[k].x==pt[i].x&&pt[k].y>pt[i].y))
k = i;
tp = pt[k];pt[k] = pt[];pt[] = tp;
sort(pt+,pt+*N,cmp);
st[] = pt[];st[] = pt[];st[] = pt[];
for(int i = ;i < *N;++ i){
while(top && cross(pt[i],st[top],st[top-]) >= )
top --;
st[++ top] = pt[i];
}
st[++ top] = pt[];
for(int i = ;i < top;++ i)
Tot_s += cross(st[],st[i],st[i+]);
Tot_s /= ;
}
void init(){
scanf("%d",&N);
for(int i = ;i < N;++ i){
double x,y,w,h,j,ang; scanf("%lf%lf%lf%lf%lf",&x,&y,&w,&h,&j); data cen(x,y);
ang = -torad(j);
pt[pc ++] = cen + Rotate(data(-w/,-h/),ang);
pt[pc ++] = cen + Rotate(data(w/,h/),ang);
pt[pc ++] = cen + Rotate(data(-w/,h/),ang);
pt[pc ++] = cen + Rotate(data(w/,-h/),ang);
area += w*h;
}
Graham();
pc = ; } int main(){
int tcase;
scanf("%d",&tcase);
while(tcase --){
init();
printf("%.1lf ",area*/Tot_s);
cout << "%" << endl;
area = ;Tot_s = ;
} return ;
}

Uva 10652 Board Wrapping(计算几何之凸包+点旋转)的更多相关文章

  1. UVA 10652 Board Wrapping 计算几何

    多边形凸包.. .. Board Wrapping Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu ...

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

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

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

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

  4. UVA 10652 Board Wrapping(凸包)

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

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

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

  6. UVA 10652 Board Wrapping(凸包)

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

  7. ●UVA 10652 Board Wrapping

    题链: https://vjudge.net/problem/UVA-10652 题解: 计算几何,Andrew求凸包, 裸题...(数组开小了,还整了半天...) 代码: #include<c ...

  8. uva 10652 Board Wrapping

    主要是凸包的应用: #include <cstdio> #include <cmath> #include <cstring> #include <algor ...

  9. 【UVA10652】Board Wrapping(求凸包面积)

    点此看题面 大致题意: 告诉你若干个矩形的重心坐标.长.宽和相对\(y\)轴的偏转角度,求矩形面积和与能围住这些矩形的最小凸包面积之比. 矩形面积和 这应该是比较好求的吧. 已经给了你长和宽,直接乘起 ...

随机推荐

  1. eclipse中运行tomcat找不到jre的解决办法

    一.在eclipse中选择 window--->preferences 二.runtime environment  ----->edit 三.在这个地方就可以进行选择jre了.

  2. Centos6架设GIT服务,windows客户端使用TortoiseGit加载KEYGEN连接GIT服务器

    前几天得空,想起前一阵学了GIT还没好好实践,就在虚拟机中安装测试了一下,并简单记录了CENTOS6中GIT安装,ssh-keygen生成,客户端使用TortoiseGit加载KEYGEN连接GIT服 ...

  3. Oracle自治事务

    定        义: Autonomous transactions are independent transactions that can be called from within anot ...

  4. SQL重复记录查询的几种方法(转)

    1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 代码如下: select * from people ) 2.删除表中多余的重复记录,重复记录是根据单个字段(people ...

  5. 一、Autofac入门

    想要将autofac集成到你的应用程序中需要经过如下步骤: 1.使用控制翻转(IoC)的思想架构你的应用程序: 2.添加autofac引用: 3.在应用程序入口...(At application s ...

  6. (原+转)pycharm中传入命令行参数

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5670821.html 参考网址: http://zhidao.baidu.com/question/5 ...

  7. C++、GDAL创建shapefile,并向矢量文件中添加网格

    //总体来说这个过程就是构建数据源->构建层->构建要素->构建形状->关闭数据源. //要包含的GDAL头文件 #include <gdal_priv.h> #i ...

  8. Firebug介绍及使用技巧

    一.介绍 Firebug是网页浏览器Firefox下的一款开发调试工具.安装firebug后在浏览器的插件工具栏中(上方)会有一个小甲虫的图标. F12打开和关闭Firebug窗口. 二.FireBu ...

  9. 如何让EcStore和微博同步来推广网站

    EcStore是创建B2C商城的首选PHP系统,它功能强大.操作方便,安装后马上就能建立起一个自己的B2C商城,但建好后如何推广运营商城却不是件容易的事. 新浪微博用户数量大.传播速度快,互联网上拥有 ...

  10. thinkphp使用模块/控制器/操作访问时出现No input file specified.解决方式

    thinkphp使用 http://serverName/index.php/模块/控制器/操作 访问时,出现了 No input file specified. 的错误 解决办法: 一: 开启cgi ...