用C++编程 输入N个点的坐标,判断这N个点能否构成一个凸多边形. 程序设计实验报告要流程图哦~求大神 20
3个回答
展开全部
多边形点集 = {P1,P2,P3,P4.....Pn}
多边形所有点满足 点(Pn-3),点(Pn)在线段(Pn-2,Pn-1)的同侧
多边形是凸多边形,否则为凹多边形。
这个函数判断点c在线段ab的左边还是右边,如果返回值大于0在左边,如果小于0在右边,否则共线
double left_right(point a,point b,point c)
{
a.x-=c.x; a.y-=c.y;
b.x-=c.x; b.y-=c.y;
return a.x*b.y-a.y*b.x;
}
bool is_tu(point *p,int n)
{
if(n<4) return false;
double a,b;
a = left_right(p[0],p[1],p[2]);
for(; ++p,--n>2; a=b){
b = left_right(p[0],p[1],p[2]);
if(a*b<0)
return false;
}
return true;
}
多边形所有点满足 点(Pn-3),点(Pn)在线段(Pn-2,Pn-1)的同侧
多边形是凸多边形,否则为凹多边形。
这个函数判断点c在线段ab的左边还是右边,如果返回值大于0在左边,如果小于0在右边,否则共线
double left_right(point a,point b,point c)
{
a.x-=c.x; a.y-=c.y;
b.x-=c.x; b.y-=c.y;
return a.x*b.y-a.y*b.x;
}
bool is_tu(point *p,int n)
{
if(n<4) return false;
double a,b;
a = left_right(p[0],p[1],p[2]);
for(; ++p,--n>2; a=b){
b = left_right(p[0],p[1],p[2]);
if(a*b<0)
return false;
}
return true;
}
展开全部
// 这是一种没有工字型的多边形
# include <iostream>
using namespace std;
int main ()
{
int n;
cin >> n;
while (n != 0)
{
int s = 1, x = 1, z = 1, y = 1, a[110] = {0}, b[110] = {0};
int flag = 1;
for (int i = 1; i <= n; i++)
{
cin >> a[i] >> b[i];
}
for (int i = 1; i < n; i++)
{
int t1 = a[i + 1] - a[i];
int t2 = b[i + 1] - b[i];
if (t1 == 0 && t2 > 0)
{
if (y == 1)
{
x = 1;
z = 0;
continue;
}
else
{
flag = 0;
cout << "No" << endl;
i = n;
}
}
if (t1 == 0 && t2 < 0)
{
if (z == 1)
{
s = 1;
y = 0;
continue;
}
else
{
flag = 0;
cout << "No" << endl;
i = n;
}
}
if (t1 > 0 && t2 == 0)
{
if (x == 1)
{
z = 1;
s = 0;
continue;
}
else
{
flag = 0;
cout << "No" << endl;
i = n;
}
}
if (t1 < 0 && t2 == 0)
{
if (s == 1)
{
y = 1;
x = 0;
continue;
}
else
{
flag = 0;
cout << "No" << endl;
i = n;
}
}
}
if (flag == 1)
{
cout << "Yes" << endl;
}
cin >> n;
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
纯算法编程,嗯,我猜大部分能写出这些算法的人,现在都应该在加班,没时间给你写,或是像我一样,疲惫的坐在电脑前,什么都不想干,因而也无法为你去写。剩下一小部分人可能会给你写,但机率太小,为了不耽误你时间,你最好还是一边自己动手,一边慢慢等,这样快一点。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询