计算机图形学问题:请高手帮忙看一下

来源:百度知道 编辑:UC知道 时间:2024/06/14 17:13:30
实践用四连通边界定义区域的边界填充算法和四向填充漫水算法 用红色填充以下区域:区域顶点为: (10,10),(70,10),(70,40),(60,60),(30,60),(10,10)。
#include "Conio.h"
#include "graphics.h"
#define closegr closegraph

void initgr(void)
{
int gd = DETECT, gm = 0;
registerbgidriver(EGAVGA_driver);
initgraph(&gd, &gm, "");
}

void boundary_fill_4(int x, int y, int boundary_color,int fill_color)
{
int current;
current = getpixel(x, y);
if ( current!=boundary_color && current!=fill_color )
{
putpixel(x, y,fill_color);
boundary_fill_4(x, y+1, boundary_color, fill_color); /* 上 */
boundary_fill_4(x, y-1, boundary_color, fill_color); /* 下 */
boundary_fill_4(x-1, y, boundary_color, fill_color); /* 左 */
boundary_fill_4(x+1, y, boundary_color, fill_color); /* 右 */
}
}

int main(void)
{
int fill_color=4,boundary_color=4;
int x1=10,y1=10

程序没错的话有两个原因:1.是你用VC编译的,但是VC不支持graphics.h,也没有graphics.h这个文件,因为它不是标准头文件,所以建义用tuoboC编译器,或者用WinTC编译器也可以。2.因为initgraph(&gd, &gm, ""); 这里表示在和可执行文件里包含一个.bgi文件(这个文件在tuoboC或WinTC里都有,你可以找一下)但是你没包含进去,所以没有画出来,而且执行时会报错。

那就是你没有先画出边界,所以在函数里判断出错,没有递归。
boundary_fill_4(x1, y1, boundary_color, fill_color);
boundary_fill_4(x2, y2, boundary_color, fill_color);
boundary_fill_4(x3, y3, boundary_color, fill_color);
boundary_fill_4(x4, y4, boundary_color, fill_color);
boundary_fill_4(x5, y5, boundary_color, fill_color);
boundary_fill_4(x6, y6, boundary_color, fill_color);
上面这里是没用的,你应该先画出边界,然后再调用boundary_fill_4函数,而且在main()函数里只调用boundary_fill_4一次就够了,其中x,y是多边形内的一个点坐标。

OK?