2024年4月28日发(作者:)
实验六 二维裁剪算法Cohen_Sutherland的实现
一、实验目的:
理解并掌握直线裁剪算法。使用Visual C++实现二维直线的裁剪的Cohen_Sutherland算法。对窗口进
行编码,并实现相应的裁剪函数。
二、实验内容及要求:
1、
2、
3、
要求用消息映射的方式,绘制出一个裁剪窗口,大小为200×150象素;
按照例程的步骤画出3条典型线段,分别对应于完全在裁剪窗口内、完全在裁剪窗口外、穿过
裁剪窗口三种情况,并按照本实验例程的方法用颜色分别表示出裁剪后的情况;
按要求撰写实验报告,写出实验心得,并在实验报告中附上程序的核心算法代码。
三、实验设备:
微机,Visual C++6.0
四、实验内容及步骤:
1、 打开VC,新建一个MFC Appwizard项目,选择创建单文档工程(SDI工程)。假设工程名为Clip。
如图1和图2所示。
图1
图2
2、 在图2的界面上点击Finish,完成工程的创建。
3、 在视图类ClipView中定义变量CRect rect; 用于记录裁剪窗口的位置;
4、 在文件中定义四个宏,记录裁剪窗口的上下左右四个位置:
#define LEFT 100
#define RIGHT 300
#define TOP 150
#define BOTTOM 310
5、 在视图类的构造函数中为rect赋值;
CClipView::CClipView()
{
// TODO: add construction code here
rect = CRect(LEFT, TOP, RIGHT, BOTTOM);
}
6、 在视图类(类CFillView中)的OnDraw()函数中绘制裁剪矩形,OnDraw函数的代码如下:
void CClipView::OnDraw(CDC* pDC)
{
CClipDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->Rectangle(&rect);
}
7、 在视图类(类CFillView中)添加成员函数int Encode(int x, int y),该函数用于对线段的两个顶点
进行Cohen_Sutherland编码。函数体如下:
int CClipView::Encode(int x, int y)
{
int nCode = 0;
if(x < LEFT)
nCode = nCode | 0x01;
if(x > RIGHT)
nCode = nCode | 0x02;
if(y > BOTTOM)
发布评论