第一道点在多边形内的判断题,一开始以为是凸的。其实题意很简单的啦,最后转化为判断一个点是否在一个多边形内。

如果只是简单的凸多边形的话,我们可以枚举每条边算下叉积就可以知道某个点是不是在范围内了。但对于更一般的多边形,要采用的方法可能就要复杂一些,其中一种是叫做射线法的东西,在该点上画一条射线,如果射线与多边形偶数次相交,则说明点在多边形外,否则在多边形内。实践中可以取水平的一条,至于怎么判断就要看下代码了,判断的过程中如何发现点已经在多边形上了则直接返回。

计算几何做的少,则是算是补充了一个盲区吧。

#pragma warning(disable:4996)
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define ll long long
#define mod 1000000007
#define maxn 1000000
#define eps 1e-6
using namespace std; struct Point
{
int x, y;
Point(int xi, int yi) :x(xi), y(yi){}
Point(){}
int dot(const Point &b){
return x*b.x + y*b.y;
}
int det(const Point &b){
return x*b.y - y*b.x;
}
Point operator - (const Point &b){
return Point(x - b.x, y - b.y);
}
}p[25]; int dcmp(double x){
return (x > eps) - (x < -eps);
} int n;
double A, B;
double lx, rx, ly, ry; bool onLine(Point x, Point aa, Point bb)
{
return (bb - aa).det(x-aa) == 0 && (bb - x).dot(aa - x) <= 0;
} bool inside(Point x)
{
int ret = 0;
for (int i = 0; i < n; i++){
if (onLine(x, p[i], p[(i + 1) % n])) return true;
int k = (p[(i + 1) % n] - p[i]).det(x - p[i]);
int d1 = x.y - p[i].y;
int d2 = x.y - p[(i + 1) % n].y;
if (k > 0 && d1 >= 0 && d2 < 0) ret++;
if (k < 0 && d2 >= 0 && d1 < 0) ret--;
}
return ret != 0;
} int main()
{
while (cin>>lx>>ly>>rx>>ry){
scanf("%d%lf%lf", &n, &A, &B);
for (int i = 0; i < n; i++){
scanf("%d%d", &p[i].x, &p[i].y);
}
p[n].x = p[0].x; p[n].y = p[0].y;
double ans = 0;
int llx = ceil(lx), rrx = floor(rx);
int lly = ceil(ly), rry = floor(ry); for (int i = llx; i <= rrx; i++){
for (int j = lly; j <= rry; j++){
if (inside(Point(i, j))){
double h = min(i + 0.5, rx) - max(i - 0.5, lx);
double w = min(j + 0.5, ry) - max(j - 0.5, ly);
ans += (A*i + B*j)*h*w;
}
}
}
ans /= (double)(rx - lx)*(ry - ly);
printf("%.3lf\n", ans);
}
return 0;
}

ZOJ3720 Magnet Darts(点在多边形内)的更多相关文章

  1. ZOJ-3720 Magnet Darts 计算几何,概率

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3720 题意:在一个矩形区域投掷飞镖,每个整点有磁性,每个点的磁性 ...

  2. PHP 判断点是否在多边形内

    如何判断一个点是否在一个多边形内,何时会用到这个场景. 我们就模拟一个真是场景.我们公司是快递公司,在本地区域有6个分点.每个分点有3-5个工人负责附近的快递派遣发送,所以根据每个点的服务区域我们就能 ...

  3. 结合谷歌地图多边形(polygon)与Sql Server 2008的空间数据类型计算某个点是否在多边形内的注意事项

    首先在利用 GEOGRAPHY::STPolyFromText(@GeoStr, 4326) 这样的函数把字符串转换为Geography类型时,字符串里经纬度的顺序是 “经度[空格]纬度”,即“lon ...

  4. 2D空间中求一点是否在多边形内

    参考自这篇博文:http://www.cnblogs.com/dabiaoge/p/4491540.html 一开始没仔细看做法,浪费了不少时间.下面是最终实现的效果: 大致流程: 1.随便选取多边形 ...

  5. 百度地图 判断marker是否在多边形内

    昨天画了圆形,判marker是否存在圆形内.今天来画多边形,判断marker在多边形内. 需要引入一个js      <script type="text/javascript&quo ...

  6. hrbustoj 1429:凸多边形(计算几何,判断点是否在多边形内,二分法)

    凸多边形 Time Limit: 2000 MS    Memory Limit: 65536 K Total Submit: 130(24 users)   Total Accepted: 40(1 ...

  7. hdu 1756 判断点在多边形内 *

    模板题 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> ...

  8. zoj 1081 判断点在多边形内

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=81Points Within Time Limit: 2 Second ...

  9. POJ 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内)

    A Round Peg in a Ground Hole Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4438   Acc ...

随机推荐

  1. 在WPF中显示GIF图片并实现循环播放

    WPF中有一个MediaElement媒体控件,可以来播放媒体,同时也可以显示GIF图片.但看到网上有些人说用MediaElement不能加载作为资源或内嵌的资源的GIF图片,我猜他们一定是在前台用X ...

  2. poj 1459 Power Network

    题目连接 http://poj.org/problem?id=1459 Power Network Description A power network consists of nodes (pow ...

  3. hdu 1908 Double Queue

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1908 Double Queue Description The new founded Balkan ...

  4. hdu 3074 Multiply game

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3074 Minimum Inversion Number Description Tired of pl ...

  5. OpenStack:安装Keystone

    >安装Keystone1. 安装# apt-get install keystone2. 创建dbcreate database keystone;grant all privileges on ...

  6. 基于jquery的页面代码的优化

    高亮显示,选中的文字链接 显示效果如下 默认选择“通知公告”效果 通知公告 学院动态 行业动态       选择“学院动态”效果 通知公告 学院动态 行业动态       选择“行业动态”效果 通知公 ...

  7. IOS内存管理「1」- 引用计数

  8. Linq To SQLite by CRUD

    1, 希望使用linqtoSQLite 来对数据库实现CRUD, 开发环境 VS2013, 1.1 在网上找到了 LINQ to DB T4 Models, 配置参考网址链接: http://www. ...

  9. iOS开发HTTPS实现之信任SSL证书和自签名证书

    iOS开发HTTPS实现之信任SSL证书和自签名证书 转自:http://www.jianshu.com/p/6b9c8bd5005a/comments/5539345 (收录一下供自己学习用的) 字 ...

  10. gitlab&fengoffice的ldap配置

    1.fengoffice配置config/ldap_config.php $config_ldap = array ( 'binddn' => 'cn=admin,dc=xxx,dc=xxx', ...