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)