HDU 2108 Shape of HDU 判断多边形凹凸

本文介绍了一种通过计算向量叉乘来判断多边形凹凸性的算法。利用逆时针顺序的顶点坐标,依次计算每组相邻三点构成的向量AB和BC的叉乘值,若所有叉乘结果非负,则该多边形为凸;反之为凹。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Shape of HDU

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2108


题目大意:逆时针给出n个点,围成一个多边形,判断该多边形的凹凸性。


题目思路:按顺序依次取三个点,构成向量AB BC,然后求AB*BC的叉乘,因为题目给出的点是按逆时针的,所以若叉乘结果为负则为凹,反之为凸。


代码:

#include<iostream>
#include<cstdio>
using namespace std;
#define N 100010

typedef struct{
    int x,y;
}Point;

int Judge(int x1,int y1,int x2,int y2){
    return x1*y2-x2*y1;
}

Point p[N];

int main(){
    int n;
    while(scanf("%d",&n)&&n){
        for(int i=0;i<n;i++){
            scanf("%d%d",&p[i].x,&p[i].y);
        }
        int ok=1;
        for(int i=0;i<n;i++){
            if( Judge(p[(i+1)%n].x-p[i].x, p[(i+1)%n].y-p[i].y, p[(i+2)%n].x-p[i].x, p[(i+2)%n].y-p[i].y)<0){
                ok=0;
                break;
            }
        }
        if(ok) printf("convex\n");
        else printf("concave\n");
    }
    return 0;
}












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值