资源简介

实验二 (选做)种子填充算法 (选做)扫描线算法

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

typedef float Color[3];
int ncount=0;
int numX[100]numY[100];

void init(void)
{
    glClearColor(0000.0);//清除当前所有颜色
    glMatrixMode(GL_PROJECTION);//投影模型
    gluOrtho2D(05000500);//二维投影,参数越大,直线越小
}

//获取一点像素的颜色
void GetPixel(GLint x GLint yColor color)
{
    glReadPixels(xy11GL_RGBGL_FLOATcolor);
}

//画像素点
void SetPixel(GLint x  GLint y)
{
    glBegin(GL_POINTS);
        glVertex2i(x y);
    glEnd();
}

//比较颜色是否相等
bool compare(Color c1Color c2)
{
   return (fabs(c1[0]-c2[0])<0.001 &&fabs(c1[1]-c2[1])<0.001 && fabs(c1[2]-c2[2])<0.001) ;
}

void FloodFill4(int xint yColor oldcolorColor newcolor)
{
    Color color;
    GetPixel(xycolor);
    if(compare(coloroldcolor))
    {
        SetPixel(xy);
        FloodFill4(xy+1oldcolornewcolor);
        FloodFill4(xy-1oldcolornewcolor);
        FloodFill4(x-1yoldcolornewcolor);
        FloodFill4(x+1yoldcolornewcolor);
    }
}

//绘制填充多边形
void drawPolygon()
{
    int i;
    glBegin(GL_POLYGON);
        for(i=0;i        {
            cout<            glVertex2i(numX[i]numY[i]);
        }
//        glVertex2i(100100);
//        glVertex2i(200100);
//        glVertex2i(200200);
//        glVertex2i(100200);
    glEnd();
}

void display()
{
    /*
    *  glClearColor表示清除颜色设为黑色
    *  glclear表示实际完成了把整个窗口清除为黑色的任务
    */
    Color oldcolor={1.00.00.0};//红色
    Color newcolor={0.01.00.0};//绿色

    glClear(GL_COLOR_BUFFER_BIT);//清除缓冲器颜色
    glColor3fv(oldcolor);//设置画笔颜色
    drawPolygon();
//    glPointSize(5);//设置点像素大小
    glColor3fv(newcolor);//设置画笔颜色
    FloodFill4(150150oldcolornewcolor);
    glFlush();//刷新缓冲
}

int main(int argcchar** argv)
{
    string filenameoneline;
    char charline[10];
    char *p;

    cout << “请输入含有多边形坐标点文件路径“ << endl;
    cin >> filename;
    ifstream infile(filename.c_str());//读取文件
    while(getline(infileoneline))//读取一行
    {
        strcpy(charlineoneline.c_str());//string转换为char[]
        p=strtok(charline““);//以分割字符串
        numX[ncount]=atoi(p);//字符串转换整数
        p=strtok(NULL““);//strtok是静态函数
        numY[ncount]=atoi(p);
        ncount++;
//        cout<    }

    glutInit(&argcargv);//从main函数传递参数
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);//设置显示模式,单缓冲,RGB
    glutInitWindowPosition(00);//窗口位置
    glutInitWindowSize(500500);//窗口大小
    glutCreateWindow(“FloodFill4“);//窗口标题

    init();//自定义初始化函数
    glutDisplayFunc(display); //渲染函数
    glutMainLoop(); //循环消息机制

    return 0;
}


/*
 *测试数据
 *100100
 *200100
 *200200
 *100300
 *50200
*/

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     948236  2014-11-25 17:34  FloodFill4\bin\Debug\FloodFill4.exe

     文件       1493  2014-11-25 10:49  FloodFill4\FloodFill4.cbp

     文件       5907  2014-11-25 17:35  FloodFill4\FloodFill4.depend

     文件        400  2014-11-25 18:38  FloodFill4\FloodFill4.layout

     文件       3089  2014-11-25 19:29  FloodFill4\main.cpp

     文件      41010  2014-11-25 17:34  FloodFill4\obj\Debug\main.o

     目录          0  2014-12-20 12:50  FloodFill4\bin\Debug

     目录          0  2014-12-20 12:50  FloodFill4\obj\Debug

     目录          0  2014-12-20 12:50  FloodFill4\bin

     目录          0  2014-12-20 12:50  FloodFill4\obj

     目录          0  2014-12-20 12:50  FloodFill4

----------- ---------  ---------- -----  ----

              1000135                    11


评论

共有 条评论