本来只要知道逆时针下,每个新增点的拐向都为逆时针就很容易做的说,不过
自己太粗心………………首先拐向判断写错
然后又少判断第一个顶点这个角…………
#include<iostream>
using namespace std;
class cor{
public:
int x,y;
};
bool drection(cor& p0,cor& p1,cor& p2){
int flag = (p2.x-p0.x)*(p1.y-p0.y)-(p1.x-p0.x)*(p2.y-p0.y);
if(flag > 0)
return false;
return true;
}
int main()
{
int n;
while(cin >>n && n){
cor p0,p1,p2;
cor p_0,p_1;
bool flag = true;
cin >>p0.x >>p0.y >>p1.x >>p1.y;
p_0 = p0; p_1 = p1;
for(int i = 3;i <= n;i++){
cin >>p2.x >>p2.y;
if(!drection(p0,p1,p2) && flag){
flag = false;
}
p0 = p1; p1 = p2;
}
if(drection(p1,p2,p_0) && drection(p2,p_0,p_1))
cout <<"convex" <<endl;
else
cout <<"concave" <<endl;
}
return 0;
}
本文介绍了一种用于判定多边形是否为凸包的算法实现。通过计算三个连续顶点构成的角度方向,判断整个多边形的所有拐角方向是否一致来确定其几何属性。具体而言,若所有拐角均为逆时针方向,则该多边形为凸包;反之则为凹包。文章提供了一个C++代码示例,包括点结构定义、拐向判断函数及主程序流程。
11万+

被折叠的 条评论
为什么被折叠?



