hdu 2108 Shape of HDU(计算几何:凸包)
来源:互联网 发布:淘宝手机版店招尺寸 编辑:程序博客网 时间:2024/05/21 07:08
给出一个多边形的n个顶点,判断这个多边形是凸多边形还是凹多边形
在这里需要清楚凸、凹多边形的定义!
对于凸多边形:多边形必然在任两点的连线的一侧
对于凹多边形:存在两点的连线将多边形分成两份
知道定义就很好写了
依次读取各个顶点,因为定点是逆时针给出,所以只用判断所有顶点是否在它前面两个定点所构成连线的左侧即可
设当前3个顶点依次为(xi, yi)、(xj, yj)、(xk, yk)
可以得到下面的不等式
(yk-yi)/(xk-xi) >= (yj-yi)/(xj-xi)
因为可能会出现分母为0的情况,所以要通分,通分的时候判别下分母的正负即可
还要注意要使用浮点类型存储分母计算结果
这个题其实可以不用数组写的,但是觉得用数组处理起来比较方便,所以就不改进了
0ms代码如下:
#include <cstdio>#include <iostream>#define MAXN 10000using namespace std;double a, b;struct Point { int x, y;}c[MAXN];bool judge(int i, int j, int k) { double tmp = (c[k].x-c[i].x)*(c[j].x-c[i].x)*1.0; if(tmp >= 0.0) { if((c[j].x-c[i].x)*(c[k].y-c[i].y) >= (c[k].x-c[i].x)*(c[j].y-c[i].y)) return true; return false; } else { if((c[j].x-c[i].x)*(c[k].y-c[i].y) <= (c[k].x-c[i].x)*(c[j].y-c[i].y)) return true; return false; }}int main(void) { int i, n; while(scanf("%d", &n) && n) { for(i=0; i<n; ++i) scanf("%d%d", &c[i].x, &c[i].y); c[n].x = c[0].x; c[n].y = c[0].y; for(i=2; i<=n; ++i) { if(!judge(i-2, i-1, i)) break; } if(i != n+1) cout << "concave" << endl; else cout << "convex" << endl; }}
0 0
- hdu 2108 Shape of HDU(计算几何:凸包)
- 【计算几何】HDU 2108 Shape of HDU 凸包
- hdu-2108-Shape of HDU(计算几何)
- hdu 2108 Shape of HDU(计算几何)
- 计算几何 凸包 hdoj2108 Shape of HDU
- HDU 2108 Shape of HDU(计算几何)
- HDU 2108 Shape of HDU (计算几何)
- HDU 2108 Shape of HDU(凸包)
- HDU 2108 Shape of HDU(几何)
- HDU 2108 Shape of HDU [凸包.判断凸包]
- 专题:计算几何学 凸包 hdu2108 shape of hdu
- hdu 2108 Shape of HDU 计算几何(向量的叉积)
- hdu 2108 Shape of HDU 计算几何(向量的叉积)
- HDU2108 Shape of HDU - 计算几何 判断凹凸多边形
- ACM-计算几何之Shape of HDU——hdu2108
- 【计算几何初步-判断是否凸多边形】【HDU2108】Shape of HDU
- hdu 4946 Area of Mushroom 计算几何(凸包)
- HDU 4946 - Area of Mushroom (计算几何 凸包)
- hdoj2565 放大的X
- 1-2(补充)新手必备Demo的介绍(初稿).md
- UI 线程和用户线程
- HDU1003
- 常见错误
- hdu 2108 Shape of HDU(计算几何:凸包)
- 驱动里执行应用层代码之KeUserModeCallBack,支持64位win7(包括WOW64)
- STL是一个新概念
- (int&)a
- 安装SQL2000时的几个问题和解决方法
- UVA784
- C + +社区多年
- HDU 4861 Couple doubi
- 常用排序算法总结