判断多边形凹凸(计算几何基础)
来源:互联网 发布:js点击图片全屏放大 编辑:程序博客网 时间:2024/05/21 06:57
描述:
任意给定一个多边形,判断它是凸还是凹。多边形的顶点以逆时针方向的序列来表示。
输入:
输入包含多组测试数据,每组数据占2行,首先一行是一个整数n,表示多边形顶点的个数,然后一行是2×n个整数,表示逆时针顺序的n个顶点的坐标(xi,yi),n为0的时候结束输入。
输出:
对于每个测试实例,如果地块的形状为凸多边形,请输出“convex”,否则输出”concave”,每个实例的输出占一行。
样例输入:
4
0 0 1 0 1 1 0 1
0
样例输出:
convex
解题思路(利用折线拐点的方式判断):
折线段的拐向判断方法可以直接由矢量叉积的性质推出。对于有公共端点的线段p0p1和p1p2,通过计算(p2 - p0) × (p1 - p0)的符号便可以确定折线段的拐向:
若(p2 - p0) × (p1 - p0) > 0,则p0p1在p1点拐向右侧后得到p1p2。
若(p2 - p0) × (p1 - p0) < 0,则p0p1在p1点拐向左侧后得到p1p2。
若(p2 - p0) × (p1 - p0) = 0,则p0、p1、p2三点共线。
#include<stdio.h>int main(){int n,x[1005],y[1005];while(scanf("%d",&n),n){for(int i=0;i<n;i++){scanf("%d %d",&x[i],&y[i]);} x[n]=x[0]; y[n]=y[0]; x[n+1]=x[1]; y[n+1]=y[1]; int flag = 0; for(int i=2;i<=n+1;i++) //3个点为一组判断,利用折线拐点的方式来判断 { int ans =(x[i]-x[i-2])*(y[i-1]-y[i-2])-(x[i-1]-x[i-2])*(y[i]-y[i-2]); if(ans>0) { flag=1; break; } } if(flag) printf("concave\n"); else printf("convex\n"); }}
阅读全文
1 0
- 判断多边形凹凸(计算几何基础)
- 判断多边形凹凸(计算几何)
- 计算几何【2】 判断凹凸多边形
- HDU2108 Shape of HDU - 计算几何 判断凹凸多边形
- 【计算几何】 叉乘求多边形面积<凹凸均可>
- hdu 2108 简单计算几何 判断凹凸
- 叉乘求任意多边形(凹凸皆可)面积 (属于计算几何类型)
- Shape of HDU 几何问题判断多边形凹凸性
- 判断多边形凹凸
- 判断多边形凹凸性
- 判断多边形凹凸性
- POJ 1654(计算几何基础多边形面积)
- HDOJ 2108 Shape of HDU (判断凹凸多边形)
- 计算几何-计算多边形面积(模板)
- 计算几何--(半平面判断多边形是否存在内核以及内核面积计算)
- 输出顺序点判断凹凸多边形
- 判断点在凹凸多边形内部
- hdu 2108 判断多边形的凹凸
- shell脚本之函数
- javascript零碎整理
- java获取当前操作系统的信息
- IDEA合并多个Maven项目到同一个Maven项目下显示(类似于Eclipse的WorkSpace)
- bootstrap中自定义modal大小并始终居中的modal综合布局demo
- 判断多边形凹凸(计算几何基础)
- HTML链接
- 资讯精选 | 开源大数据周刊-第63期
- 十六进制颜色值
- ZOJ-3453:Doraemon's Sweet Bullet
- BZOJ4530: [Bjoi2014]大融合(LCT维护子树,线段树合并)
- pat 1032. 挖掘机技术哪家强(20)
- 运用JQuery的AJAX实现excel文件下载
- Unity-Transform实例-小飞机