Uva 10652 Board Wrapping(计算几何之凸包+点旋转)
题目大意:给出平面上许多矩形的中心点和倾斜角度,计算这些矩形面积占这个矩形点形成的最大凸包的面积比。
算法: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(计算几何之凸包+点旋转)的更多相关文章
- UVA 10652 Board Wrapping 计算几何
多边形凸包.. .. Board Wrapping Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu ...
- UVA 10652 Board Wrapping(二维凸包)
传送门 刘汝佳<算法竞赛入门经典>P272例题6包装木板 题意:有n块矩形木板,你的任务是用一个面积尽量小的凸多边形把它们抱起来,并计算出木板占整个包装面积的百分比. 输入:t组数据,每组 ...
- uva 10652 Board Wrapping (计算几何-凸包)
Problem B Board Wrapping Input: standard input Output: standard output Time Limit: 2 seconds The sma ...
- UVA 10652 Board Wrapping(凸包)
The small sawmill in Mission, British Columbia, hasdeveloped a brand new way of packaging boards for ...
- 简单几何(向量旋转+凸包+多边形面积) UVA 10652 Board Wrapping
题目传送门 题意:告诉若干个矩形的信息,问他们在凸多边形中所占的面积比例 分析:训练指南P272,矩形面积长*宽,只要计算出所有的点,用凸包后再求多边形面积.已知矩形的中心,向量在原点参考点再旋转,角 ...
- UVA 10652 Board Wrapping(凸包)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=32286 [思路] 凸包 根据角度与中心点求出长方形所有点来,然后就 ...
- ●UVA 10652 Board Wrapping
题链: https://vjudge.net/problem/UVA-10652 题解: 计算几何,Andrew求凸包, 裸题...(数组开小了,还整了半天...) 代码: #include<c ...
- uva 10652 Board Wrapping
主要是凸包的应用: #include <cstdio> #include <cmath> #include <cstring> #include <algor ...
- 【UVA10652】Board Wrapping(求凸包面积)
点此看题面 大致题意: 告诉你若干个矩形的重心坐标.长.宽和相对\(y\)轴的偏转角度,求矩形面积和与能围住这些矩形的最小凸包面积之比. 矩形面积和 这应该是比较好求的吧. 已经给了你长和宽,直接乘起 ...
随机推荐
- JS 根据Url参数名称来获取对应的值 方法封装
function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...
- oracle导出数据显示出现ora-00109或者LRM-00109出错修改办法
出现这种问题是因为日期格式的问题,调整日期格式后就可以了 改成yyyy-mm-dd的格式就好了
- iOS 中的正则匹配(工具类方法)
正则表达式 正则表达式是对字符串操作的一种逻辑公式, 用事先定义好的一些特定字符.及这些特定字符的组合, 组成一个"规则字符串", 这个"规则字符串"用来表达对 ...
- java.lang.NoClassDefFoundError: javax/xml/stream/XMLStreamException
?缺少jsr173_1.0_api.jar 包 或者jdk版本不对(包括工程和tomcat等服务器的jdk版本) 以前的一个xfire工程,今天重新导进后不能运行,修改工程的jdk版本不行,最后发现是 ...
- 数学期望和概率DP题目泛做(为了对应AD的课件)
题1: Uva 1636 Headshot 题目大意: 给出一个000111序列,注意实际上是环状的.问是0出现的概率大,还是当前是0,下一个还是0的概率大. 问题比较简单,注意比较大小: A/C & ...
- C++服务器设计(零):总体设计
这个系列把毕业论文的部分贴了出来,以作保存留念.整个系列分为三大部分,其中第一章到第三章是介绍服务器的系统层设计,设计思路参考了libevent和muduo等开源代码的实现:第四章到第六章是介绍服务器 ...
- Java—Integer类
Integer类 Integer 类在对象中包装了一个基本类型 int 的值.Integer 类型的对象包含一个 int 类型的字段. 该类提供了多个方法,能在 int 类型和 String 类型之间 ...
- JS的全局变量&局部变量
<script> var i=10; //全局变量 j = 20; //全局变量 function(){ var i=30; //局部变量 h = 40; //全局变量 } </sc ...
- jQuery中$.proxy()的原理和使用
jQuery.proxy(),接受一个函数,然后返回一个新函数,并且这个新函数始终保持了特定的上下文(context )语境. jQuery.proxy( function, context ) fu ...
- USB class总结
以下是总结的USB的类,不同的USB类,主机询问的描述符格式和内容都不一样,具体的descriptor的内容可以查看 USB spec(http://www.usb.org/home/),如HID的s ...