pku 2954 Triangle pku 1265 Area Pick定理的应用 + 叉积求多边形面积
Pick定理证明:http://translate.google.com/translate?u=http://episte.math.ntu.edu.tw/articles/sm/sm_25_10_1/page4.html&hl=zh-CN&ie=UTF8&sl=zh-TW&tl=zh-CN
http://poj.org/problem?id=2954
这个题意就是求网格内给定三角形三点,然后求他的内部点的个数; pick :s = in + on/2 -1 in内部点数 on外部边上的点数 s 多边形面积这里要求的是in,通常是先求出多边形面积,以及on的值,然后求in。这里on的值得求法是 求整数点(x1,y1),(x2,y2)之间的整数个数 = gcd(|x1-x2|,|y1-y2|);
面积的求法:任意多边形面积(凸多边形+凹凸变形,不包括有两边交叉的多边形)=叉积之和的一半
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#define maxn 4
using namespace std;struct node
{int x,y;
}p[maxn];
int m,in,on;
double s;
int gcd(int x,int y)
{while (y != 0){int temp = y;y = x%y;x = temp;}return x;
}
int main()
{int i;while (~scanf("%d%d%d%d%d%d",&p[0].x,&p[0].y,&p[1].x,&p[1].y,&p[2].x,&p[2].y)){if (!p[0].x && !p[0].y && !p[1].x && !p[1].y && !p[2].x && !p[2].y) break;in = on = s = 0;for (i = 0; i < 3; ++i){on += gcd(abs(p[(i + 1)%3].x - p[i].x),abs(p[(i + 1)%3].y- p[i].y));//任意两点之间的dx,dys += p[(i + 1)%3].y*p[i].x - p[i].y*p[(i + 1)%3].x;//任意两点的叉积}s = s*0.5;if (s < 0) s = -s;//叉积求出来的可能为负,注意处理in = s + 1 - on/2.0;printf("%d\n",in);}return 0;
}
http://poj.org/problem?id=1265
同上题,只不过这里给定的直接就是dx,dy了。其默认的起点是(0,0)终止的节点也是(0,0)。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#define maxn 107
using namespace std;struct node
{int x,y;
}p[maxn];
int m,in,on;
double s;
int gcd(int x,int y)
{while (y != 0){int temp = y;y = x%y;x = temp;}return x;
}
int main()
{int t,i;int dx,dy;int cas = 1;scanf("%d",&t);while (t--){scanf("%d",&m);p[0].x = p[0].y = 0;s = in = on = 0;for (i = 1; i <= m; ++i){scanf("%d%d",&dx,&dy);on += gcd(abs(dx),abs(dy));p[i].x = p[i - 1].x + dx;p[i].y = p[i - 1].y + dy;s += p[i].y*p[i - 1].x - p[i - 1].y*p[i].x;}s = s*0.5;if (s < 0) s = -s;in = s + 1 - on/2.0;printf("Scenario #%d:\n",cas++);printf("%d %d %.1lf\n\n",in,on,s);}return 0;
}
转载于:https://www.cnblogs.com/E-star/archive/2012/05/21/2512139.html
pku 2954 Triangle pku 1265 Area Pick定理的应用 + 叉积求多边形面积相关推荐
- POJ 1265 Area(Pick定理)
POJ 1265 Area(Pick定理) 根据pick定理来做 皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式该公式可以表示为 2S=2a+b−2 其中a表示多边形内部的点数,b表示多边形边 ...
- poj 1265 Area(pick 定理)
链接:poj 1265 题意:从原点出发.给出一些dx,dy移动增量,终于形成一个多边形, 求多边形内部的格点数目,边上的格点数目 .以及面积. 补充知识: 1.以格子点为顶点的线段.覆盖的点的个数为 ...
- poj 1654 Area 多边形面积
/* poj 1654 Area 多边形面积题目意思很简单,但是1000000的point开不了 */ #include<stdio.h> #include<math.h> # ...
- poj 2954 Triangle (pick 定理 的应用 )
题意 : 求一个三角形中的 整数 点有多少个? 题接: Pick定理证明:http://translate.google.com/translate?u=http://episte.math.ntu. ...
- POJ 1265 pick 定理
首先来脑补一下几个几何知识 非常奇妙的证明:图形必在格点之外 从cut-the-knot上看到的. 问题: 设想一个平面上布满间距为1的横纵直线,形成由一个个1×1正方形组成的网格.任意给一个 ...
- POJ1265(Pick定理的应用)
题目:Area 先说说什么是Pick定理吧 Pick定理:设以整数点为顶点的多边形的面积为S,多边形内部的整数点数为N,多边形边界上的整数点数为L,则 S=L/2 + N-1. 而对于线段上的整点数我 ...
- 整数点与Pick定理
Pick 定理 设以整数点为顶点的多边形的面积为S,多边形内部的整数点数为N,多边形边界上的整数点数为L,则 N+1/2L-1=S. 对于N与L的计算由下面的程序给出: typedef struc ...
- Luogu P2735 电网【真·计算几何/Pick定理】By cellur925
题目传送门 刷USACO偶然遇到的,可能是人生中第一道正儿八经的计算几何. 题目大意:在平面直角坐标系中给你一个以格点为顶点的三角形,求三角形中的整点个数. 因为必修5和必修2的阴影很快就想到了数学中 ...
- POJ 1265 Area
题目大意: 给一个平面上的简单多边形,求边上的点,多边形内的点,多边形面积. 解题思路: 这个题用了很多知识点: 1.以格子点为顶点的线段,覆盖的点的个数为GCD(dx,dy),其中,dxdy分别为线 ...
最新文章
- NC:你觉得你吃的是草,其实你还是吃的土(遗传发育所朱峰)
- TEASOFT 关于远程WEICHAT命令
- Node.js获取mac网卡地址
- js 输出中文乱码 解决办法
- 如何让squid实现动态缓存
- 升技主板RAID磁盘阵列图解
- python报错:float object is not callable
- python图片转文字_【收藏】图片转成文字的方法总结,python批量图片转文字信息参考源码...
- 由浅到深理解ROS(3)-命名空间
- Address already in use:JVM_Bind:8080
- 通过火影忍者英雄案例 理解数据类型
- yii2 asset.php,Yii2中使用asset压缩js,css文件的方法_php实例
- Ubuntu 16.04 使用 Libcoap
- WorldList4
- python 把当前目录文件夹中的所有图片缩放为640*480
- DBCC CHECKDB 数据库或表修复
- 嵌入式 博客导航大牛群集
- 使用python和Modbus协议控制YK-08继电器
- 《三国志·战略版》爆火,友盟+助力手游实现高效促活
- 城市虚拟交通系统与交通发展决策支持模式研究