EasyX学习笔记1

KaedeharaLu 发布于 2024-08-19 700 次阅读


准备工作

IDE

就不再使用Dev-Cpp进行代码开发了,而是使用更加强大的Visual Studio
然后下载EasyX头文件安装器

先安装Visual Studio,选择C#/C++开发,等待安装完毕。
然后打开EasyX.exe安装头文件。
安装EasyX头文件

新项目

打开Visual Stuio,按照如下过程新建项目。
新项目1
新项目2
然后在下一页选择好保存位置和项目名称,新建即可。

接着打开这个项目,右键左侧(默认在右侧,我挪到了左侧)源文件,新建一个源文件。
源文件1
源文件2

EasyX的使用

  • 下面有些内容因为没有阻断,所以要在return 0前面加上getchar()来阻断程序直接终止。所以基本框架为:
#include <stdio.h>
#include <easyx.h>

int main() {

    getchar(); //防止程序退出
    return 0;
}

头文件

导入头文件。

#include <stdio.h>
#include <easyx.h> //EasyX的头文件

窗口

新建窗口

int x=640,y=480;
initgraph(x,y,flag);

initgraph(x,y,flag);新建一个窗口,x和y分别表示窗口x轴方向和y轴方向的长度。flag默认为0。

  • init的意思是初始化,graph的意思是图,图表,所以可以简单理解为 初始化图形界面
  • 这个flag是什么意思呢?这是一个可选参数,默认等于0,即不显示之前编程使用的黑框框(控制台),设置成1就可以显示控制台了。除了0和1还有其他的选项,如图。
    可选参数flag
    每一个#define都给了一个数字,这个数字和前面的EX_开头的等效。这几个选项根据注释的解释,意思如下:
  • EX_SHOWCONSOLE:显示控制台
  • EX_NOCLOSE:禁用关闭按钮
  • EX_NOMINIMIZE:禁用最小化按钮
  • EX_DBLCLKS:支持鼠标双击事件
    如果想同时设置多个要求,可以用|分隔。如:initgraph(x,y,EX_SHOWCONSOLE | EX_NOMINIMIZE)

窗口颜色

首先使用setbkcolor()函数设置颜色,再用cleardevice()刷新界面应用颜色。

setbkcolor(WHITE); //设置颜色
cleardevice(); //用设置的颜色刷新窗口

这两个函数还是非常好记忆的。

setbkcolor()=>set background color=>设置背景颜色
cleardevice()=>clear device=>清空设备=>刷新窗口内容

另外的颜色呢,可以在代码中右键WHITE,选择转到定义,就可以看见更多预设好的颜色。
更多的自定义需求,可以使用RGB混色。setbkcolor(RGB(r,g,b))表示使用红(r)、绿(g)、蓝(b)三色混色,分别取值0-255。

窗口内的坐标系

数学中,不考虑负半轴的情况,坐标原点在左下角。但是考虑一下计算机的显示,就像书写一样是从左往右,从上往下,所以坐标原点在左上角。
坐标系对比

  • 注:宽高是不包括标题栏的。

获得窗口宽高

  • 获得窗口的宽度:getwidth()
  • 获得窗口的高度:getheight()
    这个理解起来还是很简单的。

基本图像绘制

首先,这里为了方便,我将基本框架略微扩展。

#include <stdio.h>
#include <easyx.h>

void drawShape() { //绘制图形

}

int main() {
    //创建一个窗口
    initgraph(640, 480, EX_SHOWCONSOLE); // 宽度,高度,显示控制台
    setbkcolor(WHITE); //设置颜色
    cleardevice(); //用设置的颜色刷新窗口

    drawShape(); //调用自己定义的绘图函数

    getchar(); //防止程序退出
    return 0;
}

后面的所有绘图相关的代码都写在drawShape()函数中。

绘制点

绘制一个点的函数是putpixel(x,y,color)

void drawShape() { //绘制图形
    putpixel(50, 50, BLACK);
    return;
}

这执行过后,欸,咋没有呢?其实有的,是因为这只把(50,50)这一个像素点设置成黑色了,看不清楚。如果用诸如Snipaste这种带放大镜的截图软件看,就可以看到了。
绘点

绘制线段

数学中都知道,两点确定一条线段,那么我们在绘制一条线段时,也需要指定起始坐标和终止坐标。
绘制线段的函数:line(x1,y1,x2,y2)。x1,y1分别是起始点的坐标,x2,y2分别是终止点的坐标。

void drawShape() { //绘制图形
    line(0, 0, getwidth(), getheight());
    return;
}

但是这样写的代码,加入到上面的基本框架,就会发现,欸,没有线啊。其实是因为线条的默认颜色是白色,需要用setlinecolor()函数设置颜色。
比如下面的代码,就可以画一条从左上角到右下角的黑色线段。

void drawShape() { //绘制图形
    setlinecolor(BLACK);
    line(0, 0, getwidth(), getheight());
    return;
}

除了颜色,还可以设置线段的样式。用setlinestyle()函数设置样式。
一共有4个参数,这里只讲前两个。setlinestyle(style,thickness),分别对应样式,宽度。
PS样式

  • style:用PS_开头的写法或者写后面的数字都可以设置。如设置为PS_SOLID1是一样的。
  • thickness:就是线条宽度,数值>0就行。
    比如用下面的代码画出来的就是- · - · - ·的宽度为5px的线条。

    void drawShape() { //绘制图形
      setlinecolor(BLACK);
      setlinestyle(PS_DASHDOT,5);
      line(0, 0, getwidth(), getheight());
      return;
    }

绘制矩形

简单矩形

绘制矩形使用rectangle()函数。
在Visual Studio打出rectangle()后,就给出了提示的用法。
rectangle用法
这样看其实并不好记。想象一下这里有一条横平竖直的矩形的对角线,限制了方向,这个对角线是不是就可以唯一确定一个矩形?
所以这个定义的left,top什么的,就可以类比线段,记忆为rectangle(x1,y1,x2,y2)。第一组坐标是左上角,第二组坐标是右下角。

void drawShape() { //绘制图形
    setlinecolor(BLACK);
    setlinestyle(PS_SOLID, 5);
    rectangle(0, 0, getwidth() / 2, getheight() / 2);
    return;
}

这个drawShape()函数就会以黑色实线,宽度为5px画一个从左上角到屏幕中间的无填充矩形。

  • 注:setlinecolor()setlinestyle()是设置线条的颜色和样式,绘制矩形也是通过线条得到的,所以同样也可以通过这两个函数设置矩形边框的样式。

填充矩形

可以注意到,我前面专门加粗了无填充。那么怎么有填充呢?那我们稍微修改一下代码。

void drawShape() { //绘制图形
    setlinecolor(BLACK);
    setlinestyle(PS_SOLID, 5);
    rectangle(0, 0, getwidth() / 2, getheight() / 2); //无填充矩形

    setfillcolor(RED); //设置填充颜色
    fillrectangle(getwidth() / 2, getheight() / 2, getwidth(), getheight()); //有填充矩形
    
    return;
}

又新增了一个矩形绘制。setfillcolor()设置填充的颜色,同样可以用RGB()进行混色。
fillrectangle(x1,y1,x2,y2)绘制一个矩形并用前面设置到的颜色填充。如果不设置,默认用白色填充。

可以看到,这种是有填充有边框,如果希望没有边框,那就使用solidrectangle()函数。

圆角矩形

要绘制一个圆角矩形,使用(x1,y1,x2,y2,ellipsewidth,ellipseheight)函数。可以看到需要提供6个参数。x1,y1,x2,y2和前面的矩形一样,后两个参数理解前需要先了解一下圆角矩形怎么画出来的。
圆角矩形的绘制
如图,先画出一个矩形(黑笔),然后在四个角落画四个椭圆(红笔),ellipsewidth和ellipseheight的含义我也标出来了,表示这个椭圆的高度和宽度。最后,去掉矩形的四个角的部分(紫色笔圈起来),就得到了一个圆角矩形。我这里画的宽高一致,所以边缘是一个圆。

同样,这是无填充有边框圆角矩形,如果要有填充有边框则使用fillroundrect()函数,有填充无边框则使用solidroundrect(),参数等和上面的直角矩形一致。

绘制圆形

绘制圆形使用circle(x,y,radius)。这三个参数,前两个指定圆心位置,radius是半径,非常的简单。
同理,线条样式等设置与前文相同。
示例:

void drawShape() { //绘制图形
    setlinecolor(BLACK); //设置颜色
    setlinestyle(PS_SOLID, 5); //设置样式
    circle(100, 100, 50); //绘制无填充有边框圆形
    return;
}

另外几种圆的样式可以类比上面。

  • 有填充有边框:fillcircle()
  • 有填充无边框:solidcircle()

绘制椭圆

椭圆是通过矩形内接得到的椭圆,所以参数和矩形类似。

  • 无填充有边框:ellipse(x1,y1,x2,y2)
  • 有填充有边框:fillellipse()
  • 有填充无边框:solidellipse()
    示例:

    void drawShape() { //绘制图形
      setlinecolor(BLACK);
      setlinestyle(PS_SOLID, 5);
      setfillcolor(RED);
      fillellipse(50, 50, 200, 400); //绘制有填充有边框椭圆
      return;
    }

绘制折线

使用函数polyline()
示例:

void drawShape() { //绘制图形
    setlinecolor(BLACK);
    setlinestyle(PS_SOLID, 5);
    POINT points[] = { {0,0},{50,50},{200,0},{500,400} }; //设置顶点
    polyline(points, 4); //绘制
    return;
}

使用POINT points[]={{x1,y1},{x2,y2},{x3,y3} ...... }设置顶点,然后使用polyline()函数绘制。
polyline的定义是:void polyline(const POINT* points, int num),第一个参数就是传入设置的顶点坐标,第二个参数是填写顶点数量。

其他图形

图形的样式远不止此嗷,更多的可以查看官方文档查看。