二维变换与裁剪

285 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情

一、实验目的及要求

实验要求:

  1. 掌握Liang-Barskay裁剪算法裁剪金刚石图案的方法;
  2. 正确的放缩效果、平移效果;
  3. 良好的交互设计;

二、实验仪器设备与软件环境

Windows 7以上操作系统 Microsoft Visual Studio 2010

三、实验过程及实验结果分析

(包括实验原理、步骤、数据、图表、结果及分析。软件类实验应写出程序代码;硬件类实验画出电路原理图(或逻辑框图)、列出实验数据,并对实验结果进行分析)

目标:以鼠标位置为中心用梁友栋-Barsky算法裁剪,附加功能是将该区域内的图形方法或者缩小(点鼠标左键放大,点鼠标右键缩小。当点击次数超过规定次数时给予提示)。

主要实验步骤:

1 菜单:项目/添加类, 填入类名CP2,选择虚析构函数 2 P2.h如下:把CP2()和~CP2中的参数 void去掉 在这里插入图片描述

3 修改视图类CTestView类 (一)在CTestView.h前面添加 在这里插入图片描述

(二)CTestView.h声明8个成员函数、5个成员变量 在这里插入图片描述 在这里插入图片描述

运行并保存一个版本 (二)在CTestView.cpp中实现函数, 1前面添加: 在这里插入图片描述

2 构造函数 在这里插入图片描述

3裁剪测试函数ClipTest(函数头和函数体都要加) 在这里插入图片描述 在这里插入图片描述

4 裁剪函数 LBLineClip(函数头和函数体都要加) 在这里插入图片描述 在这里插入图片描述

5 放缩函数ZooX, ZooY 在这里插入图片描述

6 绘制金刚石图案Diamond(函数头和函数体都要加) 在这里插入图片描述 在这里插入图片描述

7绘制裁剪窗口函数 DrawRect函数头和函数体都要加 在这里插入图片描述

8 双缓冲函数DoubleBuffer(函数头和函数体都要加) 在这里插入图片描述

9 坐标转换函数Convert(函数头和函数体都要加) 在这里插入图片描述

10修改已经存在的OnDraw函数,添加DoubleBuffer(pDC)(将参数中pDC两侧的注释去掉)

在这里插入图片描述

此时运行会出现金刚石图案,但无法操作。保存一个版本.

四 添加消息函数,控制鼠标 1)类视图/CTestView/类向导 在这里插入图片描述

  1. 消息/双击WM_LBUTTONDOWN,编辑OnLButtonDown 在这里插入图片描述

  2. 编辑代码 在这里插入图片描述

运行,保存一个版本。此时没有放大镜显示 4) 同样方法 添加 右键消息函数 和 鼠标移动消息函数。 右键消息函数:OnRButtonDown 消息/双击WM_RBUTTONDOWN,编辑OnRButtonDown 代码: 在这里插入图片描述

鼠标移动消息还函数:OnMouseMove 消息/双击WM_MOUSEMOVE/OnMouseMove 代码: 在这里插入图片描述

运行保存一个版本,此时鼠标左键右键可以实现放大和缩小 5 同样打开CTestView类向导,消息中找到WM_CONTEXTMENU, 将对应的处理程序删掉。 可以去掉右键弹起时的快捷菜单

在这里插入图片描述

实验结果: 在这里插入图片描述