hdu2108(判断凸多边形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2108
题意:
给出一个多边形的所有顶点,判断是不是凸多边形;
思路:
判断凸多边形的方法比较多,如:若存在一条边,它的两边都有点,那么它是凹多边形;若存在一个点,去掉它后该多边形的面积大于原来的多边形,则它是凹多边形;
我们还可以用相邻两边的旋转角来判断,逆时针取点,若存在点p1, p2, p3,矢边p1p2, 到p2p3,为顺时针旋转则此多边形为凹多边形;
对于判断旋转角,我们可以用矢量乘积来判断:
令 gg=p1p2*p2p3;
若gg<0, 其旋转为顺时针;
若gg=0, 两边共线;
若gg>0, 其旋转为逆时针;
对于如何计算二维向量的叉积,我们可以将其纵坐标看做0,再像计算三维向量叉积那样用行列式计算;
p1p2*p2p3=x1*y2-x2*y1;、
此方法代码比较简洁,时间复杂度也较小,我们就选这个方法啦;
代码:
#include <iostream>
#include <stdio.h>
#define MAXN 1000001
using namespace std; int a[MAXN], b[MAXN]; int gg(int p1, int p2, int p3){
int jj=(a[p2]-a[p1])*(b[p3]-b[p2])-(a[p3]-a[p2])*(b[p2]-b[p1]);
return jj<?:;
} int main(void){
int n;
while(scanf("%d", &n)&&n){
for(int i=; i<n; i++){
scanf("%d%d", &a[i], &b[i]);
}
int flag=;
a[n]=a[], b[n]=b[]; //***注意第n-1个点的判断
a[n+]=a[], b[n+]=b[];
for(int i=; i<n; i++){
flag=gg(i, i+, i+);
if(!flag){
printf("concave\n");
break;
}
}
if(!flag){
continue;
}
printf("convex\n");
}
return ;
}
hdu2108(判断凸多边形)的更多相关文章
- 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 ...
- A Round Peg in a Ground Hole - POJ 1584 (判断凸多边形&判断点在多边形内&判断圆在多边形内)
题目大意:首先给一个圆的半径和圆心,然后给一个多边形的所有点(多边形按照顺时针或者逆时针给的),求,这个多边形是否是凸多边形,如果是凸多边形在判断这个圆是否在这个凸多边形内. 分析:判断凸多边形可 ...
- POJ - 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内)
http://poj.org/problem?id=1584 题意 按照顺时针或逆时针方向输入一个n边形的顶点坐标集,先判断这个n边形是否为凸包. 再给定一个圆形(圆心坐标和半径),判断这个圆是否完全 ...
- POJ 1584 A Round Peg in a Ground Hole 判断凸多边形 点到线段距离 点在多边形内
首先判断是不是凸多边形 然后判断圆是否在凸多边形内 不知道给出的点是顺时针还是逆时针,所以用判断是否在多边形内的模板,不用是否在凸多边形内的模板 POJ 1584 A Round Peg in a G ...
- POJ 1584 A Round Peg in a Ground Hole 判断凸多边形,判断点在凸多边形内
A Round Peg in a Ground Hole Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5456 Acc ...
- HDU2108和HDU2036(叉乘)
hdu2108 判断是否为凸边形 判断连续三点的叉乘 若为凸,内角<180:若为凹,内角>180 所以通过正负来判断 #include <iostream> #include ...
- POJ1584 A Round Peg in a Ground Hole 凸包判断 圆和凸包的关系
POJ1584 题意:给定n条边首尾相连对应的n个点 判断构成的图形是不是凸多边形 然后给一个圆 判断圆是否完全在凸包内(相切也算) 思路:首先运用叉积判断凸多边形 相邻三条边叉积符号相异则必有凹陷 ...
- poj1584(判断凸包+求点到线段的距离)
题目链接:https://vjudge.net/problem/POJ-1584 题意:首先要判断凸包,然后判断圆是否在多边形中. 思路: 判断凸包利用叉积,判断圆在多边形首先要判断圆心是否在多边形中 ...
- *HDU 2108 计算几何
Shape of HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
随机推荐
- CSS 继承深度解析
FROM ME: 之前在研究前端性能优化的时候,就有学习关于CSS中“善用CSS中的继承”. 原文:CSS Inheritance, The Cascade And Global Scope: You ...
- 不安装Oracle客户端使用PLSQL
要连接Oracle往往需要安装上百兆的ORACLE客户端,显得十分麻烦.先就介绍如何通过使用精简客户端,且不需要安装的客户端,配合PLSQL连接oracle数据库. 其实这些操作都很简单,写在这里 ...
- 160809225_叶桦汀_C语言程序设计实验2 选择结构程序设计_进阶
#include<stdio.h> #include<math.h> int main() { int a,b,c,l,p,s; printf("请输入三个数:&qu ...
- How to tile small texture image onto page as its background
You don’t need to set a big size image as the background of pages if the image is texture or uniform ...
- Java 数据库操作之Dao类
package Dao; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; imp ...
- ZendStudio 解决svn导出项目乱码问题
从svn导出项目往往会出现乱码,可以右击项目,点击properties(或者选中项目alt+enter键进入)直接修改项目编码为utf-8,但是html文件还是乱码. 下面的方法可以解决: windo ...
- VS无法启动调试:“生成下面的模块时,启用了优化或没有调试信息“
调试项目遇到错误提示,Visual Studio 2010(或VS2008或VS2005)启动调试的时候,弹出提示信息: 生成下面的模块时,启用了优化或没有调试信息: C:\WINDOWS\Micro ...
- mysql导入导出数据库命令
1.导出数据库:mysqldump -u 用户名 -p 数据库名 > 导出的文件名 如我输入的命令行: mysqldump -u root -p news > /home/jason/sq ...
- php 通过API接口连接12306余票查询
<?php header("content-type:text/html;charset='utf-8'"); //设置编码 echo "<meta cont ...
- JQ添加标签
<script type="text/javascript" src="http://files.cnblogs.com/914556495wxkj/jquery- ...