【计算机图形学】绘制图形

该文详细介绍了几个基于图形函数的编程实验,包括多笔和一笔绘制特定图形,利用lineto函数构造图形,以及填充三角形。实验使用了EasyX图形库,并给出了在VS2019下的代码实现,涉及图形初始化、线条样式、颜色设置以及鼠标事件处理。
摘要由CSDN通过智能技术生成

模块0 绘制图案

一 实验目的

  1. 熟悉相关的图形软件的运行环境,掌握图形函数绘制图案的方法,包括图形初始化,画点、线、圆、填充等常用绘图函数

二 实验要求

  1. 能利用图形函数,正确调试运行程序
  2. 熟悉网站(http://www.easyx.cn/)的使用和相关内容的阅读

三 实验内容

0:样例——多笔绘制如图所示的图形


画图思路:通过for循环寻找初始点上方和下方两排点阵列的坐标,分别将初始点和for循环当前确认的上点和下点进行画线,从左向右依次完成。实验结果如下图所示:

1:一笔绘制如图所示的图形(lineto函数)


画图思路:通过for循环寻找初始点及其上方和下方组合后能够构成平行四边形的点,一次循环中画一个平行四边形,上方从左向右依次完成,下方从右向左依次完成。实验结果如下图所示:


画图思路:通过分析需要绘制的三个图像,确定每个转折点的坐标,然后在每个图像中寻找一条欧拉通路,通过moveto函数设置一个可行的欧拉通路起点,再通过lineto函数实现通路。实验结果如下图所示:

2:绘制如图所示三角形并填充


画图思路:首先使用setfillcolor函数设置内部的填充颜色,再通过确定每个颜色所在的七边形的数组坐标,使用solidpolygon函数构建填充图形。实验结果如下图所示:

3:模仿鼠标操作题(示例程序/鼠标操作/cpp源文件),实现鼠标画线的功能

画图思路1:定义消息变量并获取鼠标和按键的消息,通过switch-case函数判定鼠标的操作,点击左键时调用moveto函数,点击右键时设置线条的样式和颜
色并调用lineto函数。实验结果如下图所示:


画图思路2:定义消息变量并获取鼠标和按键的消息,通过switch-case函数判定鼠标的操作,按下左键时调用moveto函数,松开左键时设置线条的样式和颜色并调用lineto函数。实验结果如下图所示:

四 程序说明

Project中程序的调用:

当前.cpp文件的属性——常规——从生成中排除中选择否,其他文件选择是

0

//

// 程序名称:多笔绘制

// 功  能:多笔绘制如图所示的图形

// 编译环境:VS2019,EasyX_20220116

// 最后修改:2022-2-24

#include <graphics.h>       // 引用图形库头文件

#include <conio.h>

int main()

{

    initgraph(640, 480); // 创建绘图窗口,大小为 640x480 像素

    for (int x = 160; x <= 480; x += 20) {

       line(160, 240, x, 120);

       line(160, 240, x, 360);

       line(480, 240, 640 - x, 120);

       line(480, 240, 640 - x, 360);

    }

    _getch();            // 按任意键继续

    closegraph();        // 关闭绘图窗口

    return 0;

}

1题:实现1

//

// 程序名称:一笔绘制

// 功  能:一笔绘制0题的图像

// 编译环境:VS2019,EasyX_20220116

// 最后修改:2022-2-24

#include <graphics.h>       // 引用图形库头文件

#include <conio.h>

int main()

{

    initgraph(640, 480); // 创建绘图窗口,大小为 640x480 像素

    moveto(160, 240);

    for (int x = 160; x <= 480; x += 20) {

       lineto(x, 120);

       lineto(480, 240);

       lineto(480 - (x - 160), 360);

       lineto(160, 240);

    }

    _getch();            // 按任意键继续

    closegraph();        // 关闭绘图窗口

    return 0;

}

1题:实现2

//

// 程序名称:一笔绘制

// 功  能:一笔绘制三角形、b、b中一杠的图像

// 编译环境:VS2019,EasyX_20220116

// 最后修改:2022-2-24

#include <graphics.h>       // 引用图形库头文件

#include <conio.h>

#include <math.h>

int main()

{

    initgraph(640, 480); // 创建绘图窗口,大小为 640x480 像素

    //三角形

    moveto(100, 200);

    setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 5);

    setlinecolor(RED);

    lineto(200, 400);

    setlinecolor(GREEN);

    lineto(100, 300);

    setlinecolor(BLUE);

    lineto(100, 200);

    //b

    moveto(300, 200);

    setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 5);

    setlinecolor(YELLOW);

    lineto(300, 400);

    lineto(400, 400);

    lineto(400, 300);

    lineto(300, 300);

    //b加一个杠

    moveto(500, 200);

    setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 5);

    setlinecolor(YELLOW);

    lineto(500, 400);

    lineto(600, 400);

    lineto(600, 300);

    lineto(500, 300);

    lineto(600, 400);

    _getch();            // 按任意键继续

    closegraph();        // 关闭绘图窗口

    return 0;

}

2

//

// 程序名称:填充绘制

// 功  能:绘制如图所示三角形并填充

// 编译环境:VS2019,EasyX_20220116

// 最后修改:2022-2-24

#include <graphics.h>       // 引用图形库头文件

#include <conio.h>

int main()

{

    initgraph(640, 480); // 创建绘图窗口,大小为 640x480 像素

    int point1[] = { 100,0,128,0,48,80,150,80,170,100,0,100,100,0 };

    int point2[] = { 0,100,20,120,220,120,128,28,113,43,170,100,0,100 };

    int point3[] = { 76,80,128,28,220,120,228,100,128,0,48,80,76,80 };

    /*

    moveto(100, 0);

    for (int i = 2; i < 14; i+=2) {

       lineto(point1[i], point1[i + 1]);

    }

    */

    setfillcolor(RED);

    solidpolygon((POINT*)point1, 7);

    setfillcolor(YELLOW);

    solidpolygon((POINT*)point2, 7);

    setfillcolor(BLUE);

    solidpolygon((POINT*)point3, 7);

    _getch();            // 按任意键继续

    closegraph();        // 关闭绘图窗口

    return 0;

}

3题:实现1

//

// 程序名称:模仿鼠标操作

// 功  能:点击鼠标左键确定线段起点,点击鼠标右键确定终点并画图

// 编译环境:VS2019,EasyX_20220116

// 最后修改:2022-2-24

#include <graphics.h>

int main()

{

    // 初始化图形窗口

    initgraph(640, 480);

    ExMessage m;      // 定义消息变量

    while (true)

    {

       // 获取一条鼠标或按键消息

       m = getmessage(EX_MOUSE | EX_KEY);

       switch (m.message) {

       case WM_LBUTTONDOWN:

           moveto(m.x, m.y);//确定起点

       case WM_RBUTTONDOWN:

           setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 3);//设置style

           setlinecolor(RED);//设置color

           lineto(m.x, m.y);//确定重点并连线

       case WM_KEYDOWN:

           if (m.vkcode == VK_ESCAPE)

              return 0;  // 按 ESC 键退出程序

       }

    }

    // 关闭图形窗口

    closegraph();

    return 0;

}

3题:实现2

//

// 程序名称:模仿鼠标操作

// 功  能:按下鼠标左键确定线段起点,抬起左键确定终点并画图

// 编译环境:VS2019,EasyX_20220116

// 最后修改:2022-2-24

#include <graphics.h>

int main()

{

    // 初始化图形窗口

    initgraph(640, 480);

    ExMessage m;      // 定义消息变量

    while (true)

    {

       // 获取一条鼠标或按键消息

       m = getmessage(EX_MOUSE | EX_KEY);

       switch (m.message) {

       case WM_LBUTTONDOWN:

           moveto(m.x, m.y);//确定起点

       case WM_LBUTTONUP:

           setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 3);//设置style

           setlinecolor(RED);//设置color

           lineto(m.x, m.y);//确定重点并连线

       case WM_KEYDOWN:

           if (m.vkcode == VK_ESCAPE)

              return 0;  // 按 ESC 键退出程序

       }

    }

    // 关闭图形窗口

    closegraph();

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MorleyOlsen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值