《计算机图形学》实验报告 Cohen Sutherland裁剪算法

该实验通过C++实现了Cohen-Sutherland直线段裁剪算法,用户可以动态画线并观察裁剪效果。实验中包含了裁剪窗口的平移和缩放功能,以及线段的绘制和裁剪。通过鼠标和键盘操作,用户可以直观地看到裁剪窗口的变化和线段的裁剪状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实验目的和要求

熟悉光栅图形学中的相关直线段裁剪算法、理解Cohen-Sutherland裁剪算法。

二、实验内容

实现Cohen-Sutherland编码线段裁剪算法,能看到裁剪前后的屏幕显示效果。
(裁剪效果显示窗口,放大或最大化即可显示)

三、实验过程及代码

#include<GL/glut.h>  
#include<stdio.h>  
#include<math.h>   

class Point
{
   
   
public:
	float x, y;
};

bool hasLine = true, cut = false;
float offset = 10;
int winWidth = 400, winHeight = 300;
Point clippingWindow[4], line[2], bound[4][2], inside[2];// 用于记录线段line位于裁剪窗口内的两个端点  

														 // 初始化裁剪窗口的四个顶点坐标  
void initClippingWindow(void)
{
   
   
	// 左上角  
	clippingWindow[0].x = -100;
	clippingWindow[0].y = 100;

	// 左下角  
	clippingWindow[1].x = -100;
	clippingWindow[1].y = -100;

	// 右下角  
	clippingWindow[2].x = 100;
	clippingWindow[2].y = -100;

	// 右上角  
	clippingWindow[3].x = 100;
	clippingWindow[3].y = 100;
}

// 绘制裁剪窗口  
void drawClippingWindow(void)
{
   
   
	glColor3f(0, 0, 0);
	glBegin(GL_LINE_LOOP);
	for (int i = 0; i < 4; i++)
		glVertex2f(clippingWindow[i].x, clippingWindow[i].y);
	glEnd();
}

// 更新边界  
void updateBound(void)
{
   
   
	// 由裁剪窗口的左上角顶点和左下角定点组成的线,即左边界  
	bound[0][0] = clippingWindow[0];
	bound[0][1] = clippingWindow[1];

	// 右边界  
	bound[1][0] = clippingWindow[2];
	bound[1][1] = clippingWindow[3];

	// 下边界  
	bound[2][0] = clippingWindow[1];
	bound[2][1] = clippingWindow[2];

	// 上边界  
	bound[3][0] = clippingWindow[0];
	bound[3][1] = clippingWindow[3];
}

// 初始化line  
void initLine(void)
{
   
   
	line[0].x = 0;
	line[0].y = 0;

	line[1].x = 0;
	line[1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值