种子填充法
#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<math.h>
#include<Windows.h>
#include<stdio.h> //86
#include<GL/glut.h>
int m[700][800] = { 0 };
void Init() {
glClearColor(0.7f, 0.8f, 1.0f, 0.0f); //浅蓝//rgb透明度 背景色
}
void Reshape(int w,int h) {
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, (double)w,0,(double)h);
}
void cirpot(int x1, int y1, int x, int y) {
glBegin(GL_POINTS);
glVertex2i(x1 + x, y1 + y);
glVertex2i(x1 - x, y1 + y);
glVertex2i(x1 + x, y1 - y);
glVertex2i(x1 - x, y1 - y);
glVertex2i(x1 + y, y1 + x);
glVertex2i(x1 -y, y1 + x);
glVertex2i(x1 + y, y1 -x);
glVertex2i(x1 -y, y1 -x);
glEnd();
glFlush();
m[x1 + x][y1 + y] = 1;
m[x1 - x][y1 + y] = 1;
m[x1 + x][y1 - y] = 1;
m[x1 - x][y1 - y] = 1;
m[x1 + y][y1 + x] = 1;
m[x1 - y][y1 + x] = 1;
m[x1 + y][y1 - x] = 1;
m[x1 - y][y1 - x] = 1;//printf("8%d ", m[x1-x][y1-y]);
//Sleep(1);
}
void circle_8(int x1, int y1, int r) { //八对称 ok!!!!!!!!
int x, y;
for (x = 0; x <= sqrt(2) / 2 * r; x++) {
y = (int)sqrt(r * r - x * x);
cirpot(x1, y1,x,y);
}
}
void Seedfill(int x, int y) { //四连通填充
//printf(": %d", m[x][y]);
if (m[x][y]==0) {
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
glFlush();
m[x][y] = 1;
/*Seedfill(x + 1, y - 1);
Seedfill(x - 1, y - 1);
Seedfill(x - 1, y + 1);
Seedfill(x + 1, y + 1);*/
Seedfill(x, y + 1);
Seedfill(x-1, y );
Seedfill(x, y -1 );
Seedfill(x+1, y );
}
}
void myDisplay() {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0, 0.0, 0.0);//black line
glPointSize(3.0);
circle_8(400, 500, 100);
glColor3f(1.0f, 1.0f, 1.0f);//上半
circle_8(400, 300, 100);//下半
circle_8(400, 500, 30);//鱼眼
glColor3f(0.0f, 0.0f, 0.0f);//White
circle_8(400, 300, 30);
circle_8(400, 400, 200);//大圆
glColor3f(0.0, 0.0, 0.0);//black
glPointSize(1.0);
Seedfill(400, 420);
Seedfill(300, 400);
Seedfill(400, 300);
glColor3f(1.0, 1.0, 1.0);//white
glPointSize(1.0);
Seedfill(400, 380);
Seedfill(500, 400);
Seedfill(400, 500);
}
int main(int argc,char *argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(800, 700);
glutCreateWindow("the forth");
Init();
glutReshapeFunc(Reshape);
glutDisplayFunc(myDisplay);
glutMainLoop();
return 0;
}