在画图之前,我们首先要先创建一个窗体
创建窗体的函数
initgraph(int width,int height,int flag*NULL);
width为窗体宽度,height为窗体高度,最后一个参数可省略暂时不用管。
创建窗体后,我们必然要销毁掉窗体
销毁窗体的函数
void closegraph();
接下来创建一个宽800,高600的窗体,然后调用函数关闭它
int main() { initgraph(800, 600); closegraph(); return 0; }
运行代码后,发现一个窗体一闪而过,我们可以暂时使用getchar函数暂时阻塞程序的运行,要使用getchar函数,我们又要包含头文件stdio.h。
加入代码后再次运行,效果如图
有了窗体,我们可以尝试画一些基本的图形来看一下
在运行后会出现两个窗体,终端还有创建的窗体,如果觉得不想要它可以改变终端
进入开发者选项后将由windows控制改为控制台主机即可
提前介绍一下画圆的函数
circle(int x,int y,int radius);
x,y为圆心的坐标,radius为圆的半径,加入这段代码,传入参数(0,0,300)绘制圆心为0,0,半径为300的圆,运行后效果如图
发现只有四分之一的圆,这是为什么呢?
介绍一下Easyx内的坐标系统,分为物理坐标和逻辑坐标,物理坐标和逻辑坐标的初始的坐标系都为下图
他们两个的不同的是
物理坐标系使描述窗体的坐标体系的,坐标原点和轴方向不可以更改,而逻辑坐标用于绘图的坐标体系。他的坐标原点和轴方向可以改变。
修改中心坐标函数
void setorgin(int x,int y);
将中心坐标改为坐标400,300的点,但此时y轴的方向依然是向下的
缩放函数
void setaspectratio(float xasp,float yasp);
xasp为x轴方向上的缩放因子,yasp为y轴方向上的缩放因子,如果传参数为负,则反转坐标系,将第二个参数设置为-1,更改y轴的方向,这时就形成了我们所更加熟练应用的坐标系。
添加后再次运行:
接下来是各种图形的绘制,Easyx配置了形形色色的绘制函数,让我们从绘制点来开始学习
绘制点的函数
void putpixel(int x,int y,COLORREF color);
x,y为在坐标轴的位置,COLOR color是绘制点的颜色,可以用RGB表示颜色,也可以用相应的颜色的大写英文字母来表示。
如下图
试着用绘制点的函数绘制一些点,因为一个点只有一像素,只绘制一个很难看清楚到底绘制出没有,利用for循环和设置随机数的函数生成多个点以便观察。因为我们创建的窗体大小有限制,要对生成的随机数进行处理,不能越过窗体的宽度和高度。
代码如下
int main() { initgraph(800, 600); setorigin(400, 300); setaspectratio(1,-1); for (int i = 0; i < 1000; i++) { int x = rand() % (800 + 1) - 400; int y = rand() % (600 + 1) - 300; putpixel(x, y,WHITE); } //circle(0, 0, 300); getchar(); closegraph(); return 0; }
运行后效果如图所示
圆的绘制
前边已经介绍过绘制圆的函数,不再详细描述,利用这个函数,我们画一组圆环,中心坐标不变,半径依次增大20像素,直到半径等于300为止。
代码如下
int main() { initgraph(800, 600); setorigin(400, 300); setaspectratio(1, -1); for (int i = 0; i <= 300; i+=50) { circle(0, 0, i); } getchar(); closegraph(); return 0; }
运行后如图所示
直线函数
void line(int x1,int y1,int x2,int y2)
(x1 ,y1)(x2 ,y2)分别为起始点的坐标和终止点的坐标,即线的两端。
使用一下看看效果
int main() { initgraph(800, 600); setorigin(400, 300); setaspectratio(1, -1); line(200, 200, -200, -200); line(400, 0, -400, 0); line(0, 300, 0, -300); getchar(); closegraph(); return 0; }
浅浅的绘制出坐标系,观察第一个画出的线的效果。
绘制矩形
void rectangle(int left,int top,int right,int bottom);
传入的参数和绘制直线的差不多,但表示的是一个矩形的左上角点的坐标和左下角点的坐标,知道了两个点,可以做出一个矩形。
int main() { initgraph(800, 600); setorigin(400, 300); setaspectratio(1, -1); //画出坐标系 line(400, 0, -400, 0); line(0, 300, 0, -300); //绘制矩形 rectangle(-100,100,200,-200); getchar(); closegraph(); return 0; }
运行后如图