好多天没去上图形学的课了,今天听说要交几个图形学的算法实现程序,就花了将近一天的时间终于将程序调试通过了,可是到了实验室,才知道老师根本没时间检查。哎,白写了^_^.说笑了,其实不写怎么能真正理解算法的真谛呢。现在将程序贴出来,以备将来有学弟学妹之用。(其实如果只是Copy来的程序,对自己真是没什么用,除了有时能瞒过老师,也许对成绩有帮助。仅此而已。)
/**
* 作者:老谢
* 最后修改日期:2006.4.14
* Email:do_while@sohu.com
* 功能描述:
* 图形填充算法之
* 扫描线种子填充算法;
**/
/**
* 该程序还需要一个存储 Point (点)结构的一个堆栈
* 和图形模式的初始化程序
* 这两个程序的实现程序在后面
**/
/*linescan.c*/
#include "graphics.h"
#include "dos.h"
#include "stdio.h"
#include "PStack.h"
/**
* 初始化扫描线
* (x,y)必须在图形的内部
**/
void initScan(PointStack *s,int x,int y)
{
Point p;
p.X = x;
p.Y = y;
push(s,p);
delay(4000);
}
/**
* 根据种子填充这一行,并且找到上下两行的种子,入栈
**/
void fillThisLine(PointStack *s,Point seed,color fillColor,color borderColor)
{
int curx = seed.X;
int cury = seed.Y;
int xr = 0;
int xl = 0;
int tag = 0; /*分别为区段的左右坐标值*/
Point point;
curx = seed.X;
/**
* 不是边界 也没有填充过,一直向右走
**/
while(getpixel(curx,cury) != borderColor &&
getpixel(curx,cury) != fillColor)
{
if(curx > 600)
{
pr