实验三 交互式绘制多边形
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
实验三 交互式绘制多边形相关推荐
- 计算机图形学实验二交互式绘制多边形
一.实验目的 掌握双缓冲绘图技术. (2)掌握人机交互技术. (3)掌握填充动态多边形的有效边表算法. 二.实验步骤 (1)在VS2017环境下创建MFC应用程序工程(单文档) (2)添加命令消息处理 ...
- 计算机图形学 | 实验三:绘制一个四边形
计算机图形学 | 实验三:绘制一个四边形 计算机图形学 | 实验三:绘制一个四边形 初始化 顶点输入 数据处理 VAO.VBO 顶点属性 顶点着色器和片段着色器 渲染 EBO 完整代码 华中科技大学& ...
- Vue+Openlayer使用Draw实现交互式绘制多边形并获取面积
场景 Vue+Openlayer使用Draw实现交互式绘制线段: Vue+Openlayer使用Draw实现交互式绘制线段_BADAO_LIUMANG_QIZHI的博客-CSDN博客 在上面的基础上实 ...
- python+OpenCV图像处理(三)绘制简单的几何图形、显示文字
绘制简单的几何图形.显示文字 (一)绘制直线和矩形 img = np.zeros([512, 512, 3]) # line函数用来画直线,第一个参数可以理解为画布矩阵, # 第二个参数pt1是直线的 ...
- TIT 计算机图形学 实验三 使用重心坐标算法绘制颜色渐变的正六面体
TIT 计算机图形学 实验三 使用重心坐标算法绘制颜色渐变的正六面体 前言 参考视频计算机图形学全套算法讲解和C++编码实现(共23讲配套源码),计算机图形学案例视频讲解以及主页相关算法.孔老师是我的 ...
- virtuso版图_实验三Virtuoso版图设计.doc
实验三Virtuoso版图设计 实验三 Virtuoso设计 一.实验目的 1.熟练掌握Virtuoso工具: 2.利用Virtuoso工具进行倒相器的版图设计 二.实验步骤 1.在终端提示符下,键入 ...
- 计算机图形学 实验三 相机、阴影、光照
文章目录 实验3.1 相机定位 一. 实验目的 二. 理论背景 1.各个坐标系 世界坐标系 相机坐标系 模型视图矩阵 ndc坐标系 2. 齐次坐标 3. OpenGL观察变换 三. 实验内容 Look ...
- R语言入门第四集 实验三:数据可视化
R语言入门第四集 实验三:数据可视化 一.资源 [R语言]R语言数据可视化--东北大学大数据班R实训第三次作业 在r中rowsums_R语言初级教程(15): 矩阵(下篇) R语言环境变量的设置 环境 ...
- python绘制如下图形、小三角形边长20_在编程中发现数学之美——使用Python小龟绘制多边形...
在使用数学知识画出很酷的各种图形之前,你需要先学习Python编程语言的基础知识.本文将会带你熟悉以下编程概念:循环.变量.函数.使用小龟模块绘制图像.本文假设你已经安装了Python,如果没有,欢迎 ...
最新文章
- 数据结构(数据库)设计规范
- mysql tgz 安装_不使用tgz压缩包安装mysql
- POJ 1118 求平面上最多x点共线
- Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)(二)
- GARFIELD@10-31-2004
- 【PL/SQL】 使用游标
- HDU1869 六度分离【Dijkstra算法】
- linux 下的包管理器 —— apt-get 与 dpkg
- MongoDB配置副本集时需要注意的机制
- 蓝牙耳机测试软件apk_Bose Connect(蓝牙耳机控制器)
- java spring登录验证_详解使用Spring Security进行自动登录验证
- 爬虫day1 requests基本用法和网页基础
- Matlab小课堂3
- Altium Designer学习记录之一
- R语言svm支持向量机多元回归预测
- java递归1加到10,递归1-初识递归
- SMT贴片加工产生焊点剥离的原因和方法
- html5页面长什么样子,H5是什么?5分钟就能全面了解什么是html5页面
- 系统试运行报告是谁写的_深圳个人信用报告查询系统试运行,手机就能查!
- delimiter(delimiter)
热门文章
- 第0讲:树莓派是什么?能做什么?
- SWUST OJ 1012: 哈希表(链地址法处理冲突)
- docker搭建LNRP环境
- 更改laravel的默认端口8000
- 一、 输出 1~100 之间不能被 7 整除的数,每行输出 10 个数字,要求应用字符 串格式化方法(任何一种均可) 美化输出格式。 输出效果为:
- java左手画圆右手画方_左手画圆右手画方900字作文
- 【JS】JavaScript的事件驱动和处理
- Window10 WiFi列表不显示解决方案
- 学生动物网页设计模板下载 大学生宠物HTML网页制作作品 简单宠物狗网页设计成品 dreamweaver学生网站模板
- c站官网(c站官网客户端下载苹果)