⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zhongzitianchong.cpp

📁 本来想实现一个规则图形内的颜色渐变填充...但由于一些原因,只完成了颜色填充,不过修改其变量可以改变填充颜色.
💻 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 + -