当前位置:首页 » 编程语言 » 多边形循环c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

多边形循环c语言

发布时间: 2023-02-23 06:55:22

A. c语言编程:给定N个点的坐标,这N个点依次围成一闭合多边形,再给一点(X,Y),判断它是否在多边形中。

这个闭合多边形 它是一个规则的多边形的话 很简单

所谓规则的 就是假定任何一个内角 都是小于一百八十度的..
那么 要判断一个点是不是在里头就容易了 很多方法的

比如判断它与没相邻两个点的 夹角和最后是否等于360度

还可以判断 它到每条边的距离最长的 是否比端点距离最长的两个点的距离短..

如果是不规则的多边形 比如像月亮那种....就麻烦咯

B. 求c语言高手逐句解释下列程序语句的意思,如 定义函数,设置宏等

#include <stdio.h> /*头文件*/
#define N 100 /*定义常量N为100*/

typedef struct{ /*定义一个结构体*./
double x[N];
double y[N];
int pointNum;
}points; /*定义变量points*/

int polygon(points nps) /*定义一个名为polygon的函数*/
{
double var1,var2;
int i,j,k;
if(nps.pointNum<3) return 0; /*判断变量pointNum是否小于3,若是,则返回0*/
for(i=0;i<nps.pointNum;i++) /*在polygon里定义for的循环函数,i从0到pointNum内循环,每循环一次加1*/
{
j=(i+2)%nps.pointNum; /*j=(i+2)除以pointnum的余数*/
k=(i+1)%nps.pointNum; /*k=(i+1)除以pointNum的余数*/
var1=(nps.x[i]-nps.x[k])*(nps.y[i]-nps.y[j])-(nps.y[i]-nps.y[k])*(nps.x[i]-nps.x[j]);
for(j=(j+1)%nps.pointNum;j!=i;j=(j+1)%nps.pointNum)
/*在上一个for函数里再建立一个for函数,j从(j=1)除以poinyNum的余数到j不等于i为止,每循环一次加(j=1)除以poinyNum的余数*/
{
var2=(nps.x[i]-nps.x[k])*(nps.y[i]-nps.y[j])-(nps.y[i]-nps.y[k])*(nps.x[i]-nps.x[j]);
if(var1*var2<0) return 0; /*如果var1乘var2小于0,则返回0*/
if(var2!=0) var1=var2; /*如果var2不等于0,则把var2的值给var1*/
} /*第二个for结束*/
if(var1==0) return 0; /*如果var1等于0,则返回08/
} /*第一个for结束*/
return 1;
} /*polygon函数定义结束*/

main() /*主函数*/
{
int i;
points nps;
printf("请输入顶点的个数:"); /*输出“请输入顶点的个数:”*/
scanf("%d",&nps.pointNum); /*输入数据*/
printf("请输入这些顶点的坐标,每个点的横坐标和纵坐标用逗号分隔开( 例如12.5,34 ):\n");
for(i=0;i<nps.pointNum;i++) /*依次输出几个顶点及x[i],y[i]*/
{
printf("第%d个顶点:",i+1);
scanf("%lf,%lf",&nps.x[i],&nps.y[i]);
}
if(polygon(nps)) /*如果poligon返回为真,则输出“该多边形是凸多边形。”*/
printf("该多边形是凸多边形。\n");
else /*否则输出“该多边形不是凸多边形!!!”*/
printf("该多边形不是凸多边形!!!\n");

C. c语言求凸多边形面积

输入边数 n, 输入 多边形各顶点 x,y 坐标,逆时针顺序 (保证 叉乘积 为 正)。
各顶点 x,y 坐标 减去 a[0][0]。以 a[0][0] 为主 计算各三角形面积并累加。

#include <stdio.h>
#include <stdlib.h>

main( )
{
int i,j,n;
double s=0;
double a[15][2];
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<2;j++)
scanf("%lf",&a[i][j]);
for(i=0;i<n;i++)
for(j=0;j<2;j++)
a[i][j]=a[i][j]-a[0][0];
for(i=1;i<n-1;i++)
{
s = s + 0.5*(a[i][0]*a[i+1][1]-a[i+1][0]*a[i][1]);
}
printf("%.2lf",s);
return 0;
}

D. C语言实现多边形填充

楼主问的是图形学算法。。1楼给出的是??
有以前写了一个多边形种子填充算法用的是贝塞尔方法你拿去看下把。。
1 用Bresenham直线与圆组成的扇形
void CFill4Dlg::Bresenham(int x0,int y0,int x1,int y1,int color)
{
int x,y,dx,dy,e;
dx=y1-x0;
dy=y1-y0;
e=-dx;
x=x0;
y=y0;
CClientDC dc(this);
for(x=x0;x<x1;x++)
{
dc.SetPixel(x,(int)(y+0.5),color);
e=e+2*dy;
if(e>=0)
{
y++;
e=e-2*dx;
}
}
}
void CFill4Dlg::CirclePoints(int x,int y,int m,int n,int color)
{
CClientDC dc(this);
dc.SetPixel(x+m_cx,y+m_cy,color);
dc.SetPixel(y+m_cx,x+m_cy,color);
dc.SetPixel(-x+m_cx,y+m_cy,color);
dc.SetPixel(y+m_cx,-x+m_cy,color);
dc.SetPixel(x+m_cx,-y+m_cy,color);
dc.SetPixel(-y+m_cx,x+m_cy,color);
dc.SetPixel(-x+m_cx,-y+m_cy,color);
dc.SetPixel(-y+m_cx,-x+m_cy,color);
}
void CFill4Dlg::MidPointCircle(int r,int m,int n,int color)
{
int x,y;
float d;
x=0;
y=r;
d=float(1.25-r);
CirclePoints(x,y,m,n,color);
while(x<=y)
{
if(d<0)
d+=2*x+3;
else
{
d+=2*(x-y)+5;
y--;
}
x++;
CirclePoints(x,y,m,n,color);
}
}

2 填充:
种子设定 filled_color=getpixel(m_zx,m_zy);
typedef struct
{//记录种子点
int x;
int y;
}seed;
seed * seed_p;
#define STACKTOTAL 3000
void stack_init();
void setstackempty();
void stackpush(seed pt);
seed stackpop();
bool isstackempty();
int stack_number;
填充:
void CFill4Dlg::FloodFill4(int x,int y,int oldcolor,int newcolor)
{
CClientDC dc(this);
if((int)dc.GetPixel(x,y)==oldcolor)
{
drawpixel(x,y,newcolor);
FloodFill4(x,y+1,oldcolor,newcolor);
FloodFill4(x,y-1,oldcolor,newcolor);
FloodFill4(x-1,y,oldcolor,newcolor);
FloodFill4(x+1,y,oldcolor,newcolor);
}
}
void CFill4Dlg::drawpixel(int x, int y, int color)
{
CClientDC dc(this);
dc.SetPixel(x,y,color);
}

E. 怎么在VC环境下用C语言编程画多边形

不怎么明白,是在控制台下画多边形呢,还是在窗口下呢?
窗口下很简单吧,控制台下貌似也得创建窗口,然后使用API吧

F. c语言求多边形周长

#include<stdio.h>
#include<math.h>
typedefstructtagPoint
{
floatx,y;
}Point;
floatleg(Pointp1,Pointp2)
{
returnsqrtf((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
}
floatcalc(constPoint*p,intn)
{
floatsum=0.0f;
if(n<=1)return0.0f;
for(inti=0;i<n-1;i++)
{
sum+=leg(p[i],p[i+1]);
}
sum+=leg(p[n-1],p[0]);
returnsum;
}
intmain()
{
Pointp[10];
intn;
scanf("%d",&n);
for(inti=0;i<n;i++)
{
scanf("%f%f",&p[i].x,&p[i].y);
}
printf("%.2f",calc(p,n));
return0;
}

G. C语言_凸多边形代码请求详解

给30块我都不干