急求用C语言编写的扫描线填充多边形的算法
急求用C语言编写的扫描线填充多边形的算法,一定要C语言的为什么在TC上运行后没显示任何图形应该怎样输入那五个数字才对...
急求用C语言编写的扫描线填充多边形的算法, 一定要C语言的
为什么在TC上运行后没显示任何图形
应该怎样输入那五个数字才对 展开
为什么在TC上运行后没显示任何图形
应该怎样输入那五个数字才对 展开
1个回答
展开全部
如果是用线填充,程序如下。如果是用点填充需要用到堆栈和系统底层库函数或者用画点函数putpixel()。
下面实例是用扫描线填充长方形,开始要输入长方形的左上顶点坐标和右下顶点坐标以及填充扫描线的间距(>=1),如果间距等于1,就是完全填充(实填充)。
一个完整的c程序如下,程序在win-tc和tc2.0下都调试通过。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<graphics.h>
void draw(int x1,int y1,int x2,int y2,int delta)
{int nx1,ny1,nx2,ny2;
nx1=x1,ny1=y2-delta,nx2=x1+delta,ny2=y2;
while((ny1>=y1)&&(nx2<=x2))
{line(nx1,ny1,nx2,ny2);
ny1-=delta;
nx2+=delta;
}
if(nx2>x2)
{ny2-=nx2-x2;
nx2=x2;
while(ny1>y1)
{line(nx1,ny1,nx2,ny2);
ny1-=delta;
ny2-=delta;
}
nx1+=y1-ny1;
ny1=y1;
while(nx1<x2)
{line(nx1,ny1,nx2,ny2);
nx1+=delta;
ny2-=delta;
}
}
else
{nx1+=y1-ny1;
ny1=y1;
while(nx2<x2)
{line(nx1,ny1,nx2,ny2);
nx2+=delta;
nx1+=delta;
}
ny2-=nx2-x2;
nx2=x2;
while(ny2>y1)
{line(nx1,ny1,nx2,ny2);
ny2-=delta;
nx1+=delta;
}
}
}
int main(void)
{int x1,y1,y2,x2,delta;
int driver=DETECT,mode;
printf("Please input lefttop(x1,y1) and rightbottom(x2,y2) of rectangle and delta:\n");
scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&delta);
initgraph (&driver,&mode,"C:\\TC"); /*这里*/
rectangle(x1,y1,x2,y2);
draw(x1,y1,x2,y2,delta);
gotoxy(1,1);
printf("Press any key to exit!");
getch();
closegraph();
return 0;
}
说明:将main()函数中的initgraph(&gdriver,&gmode,"");中的""更改为你的TC安装目录,一般tc必须安装在c盘根目录下,所以就是initgraph(&gdriver,&gmode,"C:\\TC");如你的TC安装目录为D盘的Tools目录下的TC目录,那么上述语句改为:
initgraph(&gdriver,&gmode,"D:\\Tools\\TC");
同时保证在D:\\Tools\\TC目录里有文件EGAVGA.BGI,万一不行,将本程序复制到你的TC安装目录下再运行。
下面实例是用扫描线填充长方形,开始要输入长方形的左上顶点坐标和右下顶点坐标以及填充扫描线的间距(>=1),如果间距等于1,就是完全填充(实填充)。
一个完整的c程序如下,程序在win-tc和tc2.0下都调试通过。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<graphics.h>
void draw(int x1,int y1,int x2,int y2,int delta)
{int nx1,ny1,nx2,ny2;
nx1=x1,ny1=y2-delta,nx2=x1+delta,ny2=y2;
while((ny1>=y1)&&(nx2<=x2))
{line(nx1,ny1,nx2,ny2);
ny1-=delta;
nx2+=delta;
}
if(nx2>x2)
{ny2-=nx2-x2;
nx2=x2;
while(ny1>y1)
{line(nx1,ny1,nx2,ny2);
ny1-=delta;
ny2-=delta;
}
nx1+=y1-ny1;
ny1=y1;
while(nx1<x2)
{line(nx1,ny1,nx2,ny2);
nx1+=delta;
ny2-=delta;
}
}
else
{nx1+=y1-ny1;
ny1=y1;
while(nx2<x2)
{line(nx1,ny1,nx2,ny2);
nx2+=delta;
nx1+=delta;
}
ny2-=nx2-x2;
nx2=x2;
while(ny2>y1)
{line(nx1,ny1,nx2,ny2);
ny2-=delta;
nx1+=delta;
}
}
}
int main(void)
{int x1,y1,y2,x2,delta;
int driver=DETECT,mode;
printf("Please input lefttop(x1,y1) and rightbottom(x2,y2) of rectangle and delta:\n");
scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&delta);
initgraph (&driver,&mode,"C:\\TC"); /*这里*/
rectangle(x1,y1,x2,y2);
draw(x1,y1,x2,y2,delta);
gotoxy(1,1);
printf("Press any key to exit!");
getch();
closegraph();
return 0;
}
说明:将main()函数中的initgraph(&gdriver,&gmode,"");中的""更改为你的TC安装目录,一般tc必须安装在c盘根目录下,所以就是initgraph(&gdriver,&gmode,"C:\\TC");如你的TC安装目录为D盘的Tools目录下的TC目录,那么上述语句改为:
initgraph(&gdriver,&gmode,"D:\\Tools\\TC");
同时保证在D:\\Tools\\TC目录里有文件EGAVGA.BGI,万一不行,将本程序复制到你的TC安装目录下再运行。
--
2022-12-05 广告
2022-12-05 广告
图形化编程简单理解为用积木块形式编程,scratch和python也是其中的一种,属于入门级编程,以其简单生动的画面获得无数学生的喜爱,深圳市创客火科技有限公司是一家做教育无人机的公司,旗下有编程无人机,积木无人机及室内外编队,每款飞机含有...
点击进入详情页
本回答由--提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询