?? zhongzitianchong.cpp
字號:
#include <windows.h>
#include <iostream.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>
#include <math.h>
#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"glu32.lib")
#pragma comment(lib,"glaux.lib")
int fill_color=RGB(0.0,1.0,0.0);
int boundary_color=RGB(1.0,0.0,0.0);
int back_color=RGB(0.0,0.0,0.0);
float v=400.0,t=400.0;
int c;
float r=250.0;
int i,j;
int color[800][800];
struct Stack //棧的數據結構
{
int x;
int y;
int color;
}a[10000000];
int size=0;
int m,n;
void push(int x,int y) //入棧函數的實現
{
a[size].x=x;
a[size].y=y;
a[size].color=fill_color;
size=size+1;
}
void pop() //出棧的函數的實現
{
size=size-1;
m=a[size].x;
n=a[size].y;
}
void drawpixel(float x,float y) //畫點函數
{
glBegin(GL_POINTS);
glColor3f(0.0,1.0,0.0);
glVertex2f(x,y);
glEnd();
glFlush();
}
void seed_filling(float x,float y)
{
while(size!=0)
{
pop(); //size-1
if(((a[size].x-v)*(a[size].x-v)+(a[size].y-t)*(a[size].y-t)<r*r))
drawpixel(a[size].x,a[size].y);
x=a[size].x;
y=a[size].y;
color[int(x)][int(y)]=fill_color;
if ((x+1-v)*(x+1-v)+(y-t)*(y-t)<=r*r && int( color[int(x+1)][int(y)])!=fill_color)
{
push(x+1,y);
}
if((x-v)*(x-v)+(y+1-v)*(y+1-v)<=r*r && int(color[int(x)][int(y+1)])!=fill_color)
{
push(x,y+1);
}
if((x-1-v)*(x-1-v)+(y-v)*(y-v)<=r*r && int (color[int(x-1)][int(y)])!=fill_color)
{
push(x-1,y);
}
if((x-v)*(x-v)+(y-1-v)*(y-1-v)<=r*r && int (color[int(x)][int(y-1)])!=fill_color)
{
push(x,y-1);
}
}
}
void CALLBACK fillseed(void)
{
glClear(GL_COLOR_BUFFER_BIT);
seed_filling(v,t);
}
void main()
{
auxInitDisplayMode(AUX_SINGLE);
auxInitPosition(0,0,800,800);
auxInitWindow("種子填充算法");
for(i=0;i<800;i++)
for(j=0;j<800;j++)
color[i][j]=back_color;
push(v,t);
auxMainLoop(fillseed);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -