https://scut.online/p/244

除了常规的求凸包求面积,还有一个判断点在凸包内,先找出点所在的三角扇区。

#include<bits/stdc++.h>
using namespace std;
#define ll long long /****************************凸包模板*******************************/ const double eps = 1e-; int sgn(double x) {
if(fabs(x) < eps)
return ;
if(x < )
return -;
else
return ;
} struct Point {
double x,y;
Point() {}
Point(double _x,double _y) {
x = _x;
y = _y;
} Point operator -(const Point &b)const {
return Point(x - b.x,y - b.y);
} //叉积
double operator ^(const Point &b)const {
return x*b.y - y*b.x;
} //点积
double operator *(const Point &b)const {
return x*b.x + y*b.y;
} void input() {
scanf("%lf%lf",&x,&y);
} void output() {
printf("(%.2f,%.2f)\n",x,y);
} }; struct Line { Point s,e; Line() {} Line(Point _s,Point _e) { s = _s;
e = _e; } }; //*两点间距离 double dist(Point a,Point b) { return sqrt((a-b)*(a-b)); } /* * 求凸包,Graham算法 * 点的编号0~n-1 * 返回凸包结果Stack[0~top-1]为凸包的编号 */ const int MAXN = +; Point List[MAXN]; int Stack[MAXN];//用来存放凸包的点 int top;//表示凸包中点的个数 //相对于List[0]的极角排序 bool _cmp(Point p1,Point p2) {
double tmp = (p1-List[])^(p2-List[]);
if(sgn(tmp) > )
return true;
else if(sgn(tmp) == && sgn(dist(p1,List[]) - dist(p2,List[])) <= )
return true;
else
return false;
} Point p[MAXN]; void Graham(int n) {
Point p0;
int k = ;
p0 = List[];
//找最下边的一个点
for(int i = ; i < n; i++) {
if((p0.y>List[i].y) || (p0.y == List[i].y && p0.x > List[i].x) ) {
p0 = List[i];
k = i;
}
}
swap(List[k],List[]);
sort(List+,List+n,_cmp);
if(n == ) {
top = ;
Stack[] = ;
return;
}
if(n == ) {
top = ;
Stack[] = ;
Stack[] = ;
return ;
}
Stack[] = ;
Stack[] = ;
top = ;
for(int i = ; i < n; i++) {
while(top > && sgn((List[Stack[top-]]-List[Stack[top-]])^(List[i]-List[Stack[top-]])) <= )
top--;
Stack[top++] = i;
} for(int i=;i<top;i++){
p[i]=List[Stack[i]];
}
} bool inside(Point A) {
int l=,r=top-,mid;
while(l<=r) {
mid=(l+r)>>;
double a1=(p[mid]-p[])^(A-p[]);
double a2=(p[mid+]-p[])^(A-p[]);
if(sgn(a1)>=&&sgn(a2)<=) {
if(sgn((p[mid+]-p[mid])^(A-p[mid]))>=)
return true;
return false;
}
else if(a1<) {
r=mid-;
}
else {
l=mid+;
}
}
return false;
}
/****************************凸包模板*******************************/
int main() {
int n;
while(~scanf("%d",&n)){
double x,y;
for(int i=;i<n;i++) {
scanf("%lf%lf",&x,&y);
List[i].x=x;
List[i].y=y;
}
Graham(n);
/*for(int i=0; i<top; i++) {
List[Stack[i]].output();
}*/ double area=0.0;
Point o(,);
for(int i=; i<top; i++) {
area+=(List[Stack[i]]-o)^(List[Stack[(i+top-)%top]]-o);
} area*=0.5;
area=fabs(area); printf("%.6f\n",area); int m;
scanf("%d",&m);
while(m--){
double x,y;
scanf("%lf%lf",&x,&y);
if(inside(Point(x,y))){
printf("Yes\n");
}
else{
printf("No\n");
}
}
}
}

SCUT - 244 - 全新的游戏 - 凸包的更多相关文章

  1. 映众全新游戏内存条发布:单条16GB 最高4000MHz

    近日,显卡与内存厂商映众(INNO3D)推出了一款全新的游戏内存条产品——iCHILL Memory. iCHILL Memory是DDR4内存,单条容量有4GB-16GB可选,内存频率有2400MH ...

  2. 爆款AR游戏如何打造?网易杨鹏以《悠梦》为例详解前沿技术

    本文来自网易云社区. 7月31日,2018云创大会游戏论坛在杭州国际博览中心103B圆满举行.本场游戏论坛聚焦探讨了可能对游戏行业发展有重大推动的新技术.新实践,如AR.区块链.安全.大数据等. 网易 ...

  3. 如何平衡MMO游戏

    转自:http://blog.sina.com.cn/s/blog_9f56a65f01013eti.html 前言 这是一篇出自国外博客“Elder Game”的一篇文章,笔者觉得里面很多东西说的很 ...

  4. 游戏数值——LOL篇 以LOL为起点-说游戏数值设计核心思路

      附     文   文档在今年三月份我动笔写了一小部分,但当时思路凌乱,行文梗阻,于是丢在一边构思了半年,现在又回过头来慢慢写,希望能写好写完吧,初衷是希望即时萌新也能看懂,但是好像并不能行——本 ...

  5. (转)iOS Wow体验 - 第三章 - 用户体验的差异化策略

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第三章译文精选,其余章节将陆续放出.上一篇:Wow ...

  6. [Cocos2d-x]Lua 资源热更新

    什么是热更新 所谓的热更新,指的是客户端的更新. 大致的流程是,客户端在启动后访问更新的URL接口,根据更新接口的反馈,下载更新资源,然后使用新的资源启动客户端,或者直接使用新资源不重启客户端. 热更 ...

  7. js实现在光标的位置 添加内容

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 朴素贝叶斯文本分类实现 python cherry分类器

    贝叶斯模型在机器学习以及人工智能中都有出现,cherry分类器使用了朴素贝叶斯模型算法,经过简单的优化,使用1000个训练数据就能得到97.5%的准确率.虽然现在主流的框架都带有朴素贝叶斯模型算法,大 ...

  9. 专家来“搞”| IoT DevKit,物联网界新手大礼包等你来拿

    专家来“搞” 这是一档基于近期热门云技术,邀请 IT 和开发领域的资深专家,来给大家分享不同领域的云技术操作环境及开发过程中经常遇到的痛点和解决方案,与实战紧密相连,帮助大家学习知识点,顺利解决工作中 ...

随机推荐

  1. JAVA设计模式之单例模式(转)

    本文继续介绍23种设计模式系列之单例模式. 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单 ...

  2. 提高系统性能——对SQL语句优化的思考

    软件在研发的过程中自始至终都在留意着系统的可扩展性.但与此同一时候也在关注着系统的性能,SQL语句作为系统性能的一环不容忽视.从今天開始结合开发的经验,谈一下我对SQL语句优化的理解和认知: 1.在联 ...

  3. 关于OC的内存管理-01

    1.什么是内存管理? 大家都知道手机的内存是有限的,app应用的内存也应该是受限制的,随着app应用的使用会导致内存的占用率增大.当内存占用率达到一种程度时.系统会发出内存警告.这时我们须要把一些不用 ...

  4. iOS 身份证验证

    - (void)onClickButton:(id) sender{ || tmp_txt.text.length == ) { NSString *emailRegex = @"^[0-9 ...

  5. deepin os 15.4 切换jdk版本

    sudo update-alternatives --config javasudo update-alternatives --config javacsudo update-alternative ...

  6. 浅谈JavaScript的事件(事件流)

     事件流描述的是从页面中接收事件的顺序.IE的事件流失事件冒泡,而Netspace的事件流失事件捕获. 事件冒泡 IE的事件流叫事件冒泡,即事件开始时,由具体的元素(文档中嵌套层次最深的节点)接收,然 ...

  7. Mongoose Embedded Web Server Library

    https://github.com/cesanta/mongoose http://ltp.ai/docs/ltpserver.html LTP Server在轻量级服务器程序mongoose基础上 ...

  8. cocos2d-x交叉编译到安卓

    ccocos2d-x是一个基于MIT协议的开源框架,用于构建游戏.应用程序和其它图形界面交互应用. 它的最大特点就是跨平台性,支持IOS, Android.Windows, WindowsPhone等 ...

  9. SyntaxError:Strict mode does not allow function declaration in a lexically nested statement.

    问题描述   使用react-native init创建了一个新项目,在package.json中使用的react-native的版本如下: "dependencies": { & ...

  10. kbmMW 5.0.1发布了(跨全平台,包括Linux,可使用Win的高性能HTTPSys传输层,等等)

    kbmMW5如期发布,作者增加了很多重磅功能,以下翻译作者的发布文件:1.支持Delphi 10.2 Tokyo,包括Linux支持(测试版)2.大量的新功能与改进3.新的智能服务(Smart ser ...