N个点是否能构成一个凸多边形
一道计算几何类的题目:输入N个点的坐标,由程序判断该N个点是否能构成一个凸多边形。
希望找到这道题目及其解答的出处,例如某本书或某篇文章中,希望知道的朋友能够告诉我。
[解决办法]
先找凸包再看点都在凸包上么
在的话就是可以
有任何点不在就不可以
[解决办法]
你看一下如果减少一个或几个点后多边形的面积如果比原多边形的面积大,原来的肯定不是凸多边形
[解决办法]
判断所有连续的3个点是否同顺时针或逆时针
[解决办法]
http://zhidao.baidu.com/question/43293200
[解决办法]
可以根据凹多边形和凸多边形的定义来做:任意相邻两点连线,如果其它所有的点都在这条线的同侧就是凸多边形,否则为凹多边形。
[解决办法]
原来是要证明啊
如果是计算的话按照一个方向对相邻两条边向量做叉积(有向的,都是顺时针或者都是逆时针),如果所有结果都同号,就是凸多边形。这个是目前我知道的最快的方法,只需要2n次乘法n次减法
[解决办法]
//判定凸多边形,顶点按顺时针或逆时针给出,允许相邻边共线int is_convex(int n,point* p){ int i,s[3]={1,1,1}; for (i=0;i<n&&s[1]|s[2];i++) s[_sign(xmult(p[(i+1)%n],p[(i+2)%n],p[i]))]=0; return s[1]|s[2];}//判定凸多边形,顶点按顺时针或逆时针给出,不允许相邻边共线int is_convex_v2(int n,point* p){ int i,s[3]={1,1,1}; for (i=0;i<n&&s[0]&&s[1]|s[2];i++) s[_sign(xmult(p[(i+1)%n],p[(i+2)%n],p[i]))]=0; return s[0]&&s[1]|s[2];}
[解决办法]
不用找出全部凸包,在找凸包的过程中就可以解决了,也许找那么2、3个点,就可以判断不成立了。
[解决办法]