几何:pick定理详解
一、概念
假设P的内部有I(P)个格点,边界上有B(P)个格点,则P的面积A(P)为:A(P)=I(P)+B(P)/2-1。
二、说明
Pick定理主要是计算格点多边形(定点全是格点的不自交图形)P的面积与其边界和内部格点数之间的关系。
格点多边形的面积A(P)可以通过叉积计算出来,不过叉积计算出来的面积是实际面积的2倍;
边界上的格点B(P)可以通过计算相邻两点的横坐标之差与纵坐标之差的最大公约数的和得到;
内部的格点I(P)则通过公式得:I(P) = A(P)-B(P)/2+1计算出。
解释:
a.关于边界格点计算两点横纵坐标之差就是以两个点构成的边做坐标轴,组成的三角形(或者线)的两个之角标求gcd
b.格点多边形的面积是通过将多边形固定一个点,然后在遍历每两个点,三个点构成的三角形求面积。由于叉积可以为负,所以不必担心多加的三角形或者不在多边形内部的三角形,都会减去。
三、代码
#include <stdio.h>
#include <math.h>
#include<stdlib.h>
struct node
{
int x,y;
} point[]; int gcd(int a,int b)//gcd
{
if(b==)
return a;
return
gcd(b,a%b);
} int Area(node a,node b)//叉积
{
return a.x*b.y-a.y*b.x;
} int main()
{
int T,case1=;
scanf("%d",&T);
int n;
while(T--)
{
int a=,p=,dx,dy,i;
scanf("%d",&n);
point[].x=;
point[].y=;
for(i=; i<=n; i++)
{
scanf("%d%d",&point[i].x,&point[i].y); /*求每条边上的点*/
dx=abs(point[i].x);
dy=abs(point[i].y);
p+=gcd(dx,dy); /*用叉积求面积*/
point[i].x+=point[i-].x;
point[i].y+=point[i-].y;
a+=Area(point[i],point[i-]); }
/*最后面积要取正值*/
a=abs(a); printf("Scenario #%d:\n",case1++);
printf("%d %d %.1f\n\n",(a-p+)/,p,0.5*a);
}
return ;
}
几何:pick定理详解的更多相关文章
- pick定理详解
一.概念 假设P的内部有I(P)个格点,边界上有B(P)个格点,则P的面积A(P)为:A(P)=I(P)+B(P)/2-1. 二.说明 Pick定理主要是计算格点多边形(定点全是格点的不自交图形)P的 ...
- Lucas定理详解
这篇博客是从另一位园友那里存的,但是当时忘了写原文的地址,如果有找到原文地址的请评论联系! Lucas定理解决的问题是组合数取模.数学上来说,就是求 \(\binom n m\mod p\).(p为素 ...
- 高斯消元法(Gauss Elimination)【超详解&模板】
高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵.高斯消元法的原理是:若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程组. ...
- 《Unity3D 实战核心技术详解》书中关于矩阵的错误
最近一直在学习实时渲染,不免要接触线性代数.而渲染中,一定会用到矩阵,当我再次去复习我之前看的书时,发现<Unity3D 实战核心技术详解>关于矩阵就有几处错误 ,特标注出来. 书的第一章 ...
- POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 9897 Accepted: 41 ...
- (转载)--SG函数和SG定理【详解】
在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点 ...
- 机器学习经典算法详解及Python实现--基于SMO的SVM分类器
原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector ...
- redis配置详解
##redis配置详解 # Redis configuration file example. # # Note that in order to read the configuration fil ...
- Redis 配置文件 redis.conf 项目详解
Redis.conf 配置文件详解 # [Redis](http://yijiebuyi.com/category/redis.html) 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, ...
随机推荐
- Razor使用Parse()时最好指定“缓存名”
为什么? 本文的标题,明显有一种提醒的口吻. 从18年的生活经验看,如果想提醒人要怎么办,不要怎么办. 最好说明原因.那么小编开始说明原因喽. 哦对,说原因之前,先说交代一下背景,一句话 在非mvc下 ...
- python学习笔记(十)之格式化字符串
格式化字符串,可以使用format方法.format方法有两种形式参数,一种是位置参数,一种是关键字参数. >>> '{0} {1}'.format('Hello', 'Python ...
- HDU 2050 折线分割平面 (数学)
题目链接 Problem Description我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可 ...
- react 修改state某一属性值
1.state // 筛选框相关数据 searchSelect: { term: { value: '学期', key: '', options: [] }, type_of_personnel: { ...
- 黑色的cms商城网站后台管理模板——后台
链接:http://pan.baidu.com/s/1hst6Lbm 密码:9ad7
- centos如何设置定时任务
1.crontab -e 打开任务列表,输入i开始编写面之后按esc退出编写默写,:wq保存退出即可. 2.关于时间格式的定义,,请使用下面的网站 https://crontab.guru/#00_0 ...
- 【转载】C#异常Retry通用类
//Retry机制 public static class Retry { /// <summary> /// 重试零个参数无返回值的方法 /// </summary> /// ...
- ASP.NET中的状态保持
1.ASP.NET中的状态保持解决方案 2.常用的状态报保持方式 view state ASP.Net的.aspx页面特有,页面级的,就是在页面上的一个隐藏域中保存客户端单独使用的数据的一种方式(b ...
- PCA算法和SVD
如果矩阵对某一个向量或某些向量只发生伸缩变换,不对这些向量产生旋转的效果,那么这些向量就称为这个矩阵的特征向量,伸缩的比例就是特征值.这里可以将特征值为负,特征向量旋转180度,也可看成方向不变,伸缩 ...
- 20165301 2017-2018-2 《Java程序设计》第二周学习总结
20165301 2017-2018-2 <Java程序设计>第二周学习总结 教材学习内容总结 第二章:基本数据类型与数组 标识符 第一个字符不能是数字 不能是关键字 不能是true.fa ...