用C++编程 输入N个点的坐标,判断这N个点能否构成一个凸多边形. 程序设计实验报告要流程图哦~求大神 20

 我来答
crystaldn01
2013-04-16 · 超过16用户采纳过TA的回答
知道答主
回答量:46
采纳率:0%
帮助的人:34.5万
展开全部
多边形点集 = {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;

}
言川之
2018-12-27
知道答主
回答量:4
采纳率:0%
帮助的人:2883
展开全部
// 这是一种没有工字型的多边形
# 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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
码斯客
2013-04-15 · TA获得超过2224个赞
知道小有建树答主
回答量:993
采纳率:50%
帮助的人:596万
展开全部
纯算法编程,嗯,我猜大部分能写出这些算法的人,现在都应该在加班,没时间给你写,或是像我一样,疲惫的坐在电脑前,什么都不想干,因而也无法为你去写。剩下一小部分人可能会给你写,但机率太小,为了不耽误你时间,你最好还是一边自己动手,一边慢慢等,这样快一点。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式