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

  算法: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. ORACLE/MYSQL/DB2等不同数据库取前几条记录

    选取数据库中记录的操作是最基础最频繁的,但往往实际应用中不会这么简单,会在选取记录的时候加上一些条件,比如取前几条记录,下面就总结了如何在ORACLE/MYSQL/DB2等一些热门数据库中执行取前几条 ...

  2. JavaScript禁止用户多次提交方法

    [当服务器超载时,会出现提交卡顿的现象,但是用户在操作时,会不停重复点击提交,会造成服务器压力更大.所以我们需要进行限制] [1]将提交按钮禁止 <html> <head> & ...

  3. C++ 查找文件夹下的文件

    #include <string> #include <vector> #include <cstring> #include <cstdio> #in ...

  4. pp to write

    vanishing gradient problem multi-dimensional lstm

  5. ASPCMS 多条件查询

    1. 表单样例: <form name="topFrm" id="topFrm" action="/search.asp"> & ...

  6. javascript:自定义事件初探

    javascript:自定义事件初探   http://www.cnblogs.com/jeffwongishandsome/archive/2008/10/27/1317148.html

  7. [C++程序设计]引用

    对一个数据可以使用“引用”(reference),这是C++对C的一个重要扩充,引用是一种新的变量类型,它的作用是为一个变量起一个别名.假如有一个变量a,想给它起一个别名b,可以这样写:int a; ...

  8. 解决MYSQL弃用模块错误Deprecated: mysql_query(): The mysql extension is deprecated and will be removed in the future

    今天使用了mysql 5.5版本,就出现了错误.错误提示如下: Deprecated: mysql_connect(): The mysql extension is deprecated and w ...

  9. SqlCommand类

    一.常用属性 CommandText 获取或设置要对数据源执行的 Transact-SQL 语句.表名或存储过程. CommandTimeout 获取或设置在终止执行命令的尝试并生成错误之前的等待时间 ...

  10. haproxy nginx 多路径

    nginx 多路径: location / { root /t/deploy/zjdev/deployedApps/zjzc-web-frontEnd/; index index.html index ...