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

news/2024/11/23 8:03:11/

模块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;

}


http://www.ppmy.cn/news/574879.html

相关文章

Canvas图形

Canvas canvas 是一个可以使用脚本(通常为JavaScript)来绘制图形的 HTML 元素。 Canvas API 提供了一个通过JavaScript 和 HTML的Canvas元素来绘制图形的方式。 它可以用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。 Canvas API 主要聚焦于2D图形。而同样…

绘图方式:形状绘图

形状绘图 绘图的方式有两种&#xff1a;形状绘图和几何绘图 今天先和大家分享形状绘图 1.直线 直线是最简单的图形。使用X1、Y1两个属性可以设置它的坐标起点&#xff0c;X2&#xff0c;Y2两个属性则用来设置其终点坐标。控制起点/终点坐标就可以实现平行、交错等效果 2.矩形 矩…

二维图形几何变换(计算机图形学)

说明&#xff1a;本实验代码在vs2022下可正常运行&#xff0c;本实验适配于计算机图形学新版&#xff08;VC MFC &#xff09;第二版 1.实验目的 1&#xff09;掌握3*3矩阵乘法运算的编程实现 2&#xff09;掌握平移&#xff0c;比例&#xff0c;旋转三种基本二维几何变换矩…

计算机图形学 | 欢迎来到图形世界

计算机图形学 | 欢迎来到图形世界 计算机图形学 | 欢迎来到图形世界1.1 初识图形学计算机图形学相关学科发展历史 1.2 探秘图形应用与研究有趣的图形应用计算机辅助设计&#xff08;Computer-Aided Design&#xff09;&#xff1a;虚拟现实环境&#xff08;Virtual-Reality Env…

关于图形的绘制

import matplotlib.pyplot as plt #导入绘图第三方库 plt.plot([4,1,5,3]) plt.savefig(test1,dpi600) #存储图形文件 plt.savefig(../picture/test1,dpi600) plt.axis(equal) plt.show() import matplotlib.pyplot as plt #导入绘图第三方库 plt.plot([4,1,4,4,3,5,…

【XJTUSE计算机图形学】第三章 几何造型技术(1)——参数曲线和曲面

文章目录 【XJTUSE计算机图形学】第三章 几何造型技术(1)——参数曲线和曲面参数曲线和曲面曲线曲面参数表示非参数表示参数表示 曲线的基本概念插值、拟合和光顺(掌握概念)参数化概念参数化常用方法参数区间的规格化 参数曲线的代数和几何形式(了解一下)代数形式几何形式 连续…

【图形学】04 数学部分(四、放射变换)

文章目录 1、线性变换2、仿射变换3、张成空间4、对于齐次坐标的理解n、多边形重心的推论 1、线性变换 线性变换从几何直观有三个要点&#xff1a; 变换前是直线的&#xff0c;变换后依然是直线直线比例保持不变变换前是原点的&#xff0c;变换后依然是原点 比如说旋转&#x…

Matplotlib还能这么画!(附25个案例详细代码)

作者&#xff1a;zsx_yiyiyi 编辑&#xff1a;python大本营 大家好&#xff0c;今天分享给大家25个Matplotlib图的汇总&#xff0c;在数据分析和可视化中非常有用&#xff0c;文章较长&#xff0c;可以收藏下来慢慢练手。 # !pip install brewer2mpl import numpy as np import…