visual studio2019实现交互式绘制多边形

这个实验······在网上找不到。孔令德的实验代码下载下来有密码,暴力破解没希望,只能自己写了。
这个和实验二是紧密相连的。

实验实现的目标

在屏幕上点击一个点,松开移动鼠标,线就会跟着鼠标进行延长,再次点击就会形成新的点,两点之间形成线段,然后新的线继续跟着鼠标跑。
当鼠标经过起点的时候,直线自动连到起点,形成闭合多边形,并且完成颜色的填充。
所以相对实验二,我们要实现直线的动态显示(橡皮筋绘制技术)和填充多边形。其中填充多边形用到了双缓冲机制,避免绘图的过渡(瞬间上色)。

橡皮筋技术和用户交互

直线在鼠标的移动下像橡皮筋那样拉伸,就是橡皮筋技术。实现这个技术同样需要双缓冲机制。

下面的代码是网上找来的。来源

int isPress=0;
CPoint start;
CPoint end;//将上述代码放在***View.cpp里面的开头部分(只要能在***View.cpp里面起控制全局的作用就行,例如放在#endif后面)
//在***View.cpp里面用添加类向导将单击鼠标左键,鼠标移动映射为相应的函数。并且添加以下代码void CXiangpijinView::OnLButtonDown(UINT nFlags, CPoint point)
{// TODO: Add your message handler code here and/or call defaultisPress=1;start=point;end=start;CView::OnLButtonDown(nFlags, point);
}void CXiangpijinView::OnMouseMove(UINT nFlags, CPoint point)
{// TODO: Add your message handler code here and/or call defaultCDC *pDC=this->GetWindowDC();if (isPress){pDC->SetROP2(R2_NOT);pDC->MoveTo(start);pDC->LineTo(end);pDC->MoveTo(start);pDC->LineTo(point);end=point;}CView::OnMouseMove(nFlags, point);
}

以上代码实现了画线的橡皮筋功能,效果类似于实验二,但是是系统调用的方法。

实现绘制多边形

可以在屏幕上画线了,就要绘制多边形。

当鼠标左击一次,就创建一个点,鼠标移动显示橡皮筋拉伸的线。再次点击,生成第二个点,线段生成,并生成新的橡皮筋线。

我们需要保存画的点和线。

//在view.h中建立一个CPoint
CPoint point[100];

如果要保存边,就要创建新的类,AET和Bucket类

虽然孔令德的实验代码没办法得到,但是他的课本课后习题的代码在网上有,其中就有“多边形有效边表填充算法”的实验,里面实现了AET和Bucket

文件我就不发出来了,最后看我的代码就可以。

使用AET和Bucket保存边,并且进行填充。

最后实现画图的功能,vs2019工程文件,代码不方便一一展示,就放在后面供大家下载参考吧。

程序刚启动的时候不要着急点,等待程序加载,不然你会发现点不出直线。
左键用来画线,右键用来绘制,切记!!

代码:https://share.weiyun.com/5iIVZUq

转载于:https://www.cnblogs.com/amtop/p/10968688.html

实验三 交互式绘制多边形相关推荐

  1. 计算机图形学实验二交互式绘制多边形

    一.实验目的 掌握双缓冲绘图技术. (2)掌握人机交互技术. (3)掌握填充动态多边形的有效边表算法. 二.实验步骤 (1)在VS2017环境下创建MFC应用程序工程(单文档) (2)添加命令消息处理 ...

  2. 计算机图形学 | 实验三:绘制一个四边形

    计算机图形学 | 实验三:绘制一个四边形 计算机图形学 | 实验三:绘制一个四边形 初始化 顶点输入 数据处理 VAO.VBO 顶点属性 顶点着色器和片段着色器 渲染 EBO 完整代码 华中科技大学& ...

  3. Vue+Openlayer使用Draw实现交互式绘制多边形并获取面积

    场景 Vue+Openlayer使用Draw实现交互式绘制线段: Vue+Openlayer使用Draw实现交互式绘制线段_BADAO_LIUMANG_QIZHI的博客-CSDN博客 在上面的基础上实 ...

  4. python+OpenCV图像处理(三)绘制简单的几何图形、显示文字

    绘制简单的几何图形.显示文字 (一)绘制直线和矩形 img = np.zeros([512, 512, 3]) # line函数用来画直线,第一个参数可以理解为画布矩阵, # 第二个参数pt1是直线的 ...

  5. TIT 计算机图形学 实验三 使用重心坐标算法绘制颜色渐变的正六面体

    TIT 计算机图形学 实验三 使用重心坐标算法绘制颜色渐变的正六面体 前言 参考视频计算机图形学全套算法讲解和C++编码实现(共23讲配套源码),计算机图形学案例视频讲解以及主页相关算法.孔老师是我的 ...

  6. virtuso版图_实验三Virtuoso版图设计.doc

    实验三Virtuoso版图设计 实验三 Virtuoso设计 一.实验目的 1.熟练掌握Virtuoso工具: 2.利用Virtuoso工具进行倒相器的版图设计 二.实验步骤 1.在终端提示符下,键入 ...

  7. 计算机图形学 实验三 相机、阴影、光照

    文章目录 实验3.1 相机定位 一. 实验目的 二. 理论背景 1.各个坐标系 世界坐标系 相机坐标系 模型视图矩阵 ndc坐标系 2. 齐次坐标 3. OpenGL观察变换 三. 实验内容 Look ...

  8. R语言入门第四集 实验三:数据可视化

    R语言入门第四集 实验三:数据可视化 一.资源 [R语言]R语言数据可视化--东北大学大数据班R实训第三次作业 在r中rowsums_R语言初级教程(15): 矩阵(下篇) R语言环境变量的设置 环境 ...

  9. python绘制如下图形、小三角形边长20_在编程中发现数学之美——使用Python小龟绘制多边形...

    在使用数学知识画出很酷的各种图形之前,你需要先学习Python编程语言的基础知识.本文将会带你熟悉以下编程概念:循环.变量.函数.使用小龟模块绘制图像.本文假设你已经安装了Python,如果没有,欢迎 ...

最新文章

  1. 数据结构(数据库)设计规范
  2. mysql tgz 安装_不使用tgz压缩包安装mysql
  3. POJ 1118 求平面上最多x点共线
  4. Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)(二)
  5. GARFIELD@10-31-2004
  6. 【PL/SQL】 使用游标
  7. HDU1869 六度分离【Dijkstra算法】
  8. linux 下的包管理器 —— apt-get 与 dpkg
  9. MongoDB配置副本集时需要注意的机制
  10. 蓝牙耳机测试软件apk_Bose Connect(蓝牙耳机控制器)
  11. java spring登录验证_详解使用Spring Security进行自动登录验证
  12. 爬虫day1 requests基本用法和网页基础
  13. Matlab小课堂3
  14. Altium Designer学习记录之一
  15. R语言svm支持向量机多元回归预测
  16. java递归1加到10,递归1-初识递归
  17. SMT贴片加工产生焊点剥离的原因和方法
  18. html5页面长什么样子,H5是什么?5分钟就能全面了解什么是html5页面
  19. 系统试运行报告是谁写的_深圳个人信用报告查询系统试运行,手机就能查!
  20. delimiter(delimiter)

热门文章

  1. 第0讲:树莓派是什么?能做什么?
  2. SWUST OJ 1012: 哈希表(链地址法处理冲突)
  3. docker搭建LNRP环境
  4. 更改laravel的默认端口8000
  5. 一、 输出 1~100 之间不能被 7 整除的数,每行输出 10 个数字,要求应用字符 串格式化方法(任何一种均可) 美化输出格式。 输出效果为:
  6. java左手画圆右手画方_左手画圆右手画方900字作文
  7. 【JS】JavaScript的事件驱动和处理
  8. Window10 WiFi列表不显示解决方案
  9. 学生动物网页设计模板下载 大学生宠物HTML网页制作作品 简单宠物狗网页设计成品 dreamweaver学生网站模板
  10. c站官网(c站官网客户端下载苹果)