计算机图形学:直线段裁剪,Cohen-Sutherland算法

这篇具有很好参考价值的文章主要介绍了计算机图形学:直线段裁剪,Cohen-Sutherland算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是直线段裁剪:

在二维观察中,需要对窗口进行裁剪,即只保留窗口内的图形,去掉窗口外的图形。直线段裁剪即判断直线在窗口内的部分,去除在窗口外的部分(红圈处)。

计算机图形学:直线段裁剪,Cohen-Sutherland算法


直线段裁剪算法——Cohen-Sutherland算法:

其基本思想为编码,即对于直线上任一点(x,y),根据其坐标所在的区域,赋予一个4位的二进制码D3D2D1D0。

编码规则如下:

(1)若x<wxl,D0=1,否则D0=0;

(2)若x>wxr,D1=1,否则D1=0;

(3)若y<wyb,D2=1,否则D2=0;

(4)若y>wyt,D3=1,否则D3=0。

计算机图形学:直线段裁剪,Cohen-Sutherland算法

 举例:假如wxl=1,wxr=3,wyt=2,wyb=1。则点(4,3)的编码就是1010。

计算机图形学:直线段裁剪,Cohen-Sutherland算法

由此:直线的两个端点的编码表示出了线段的方位。

算法流程: 

① 求出直线段两个端点的编码code1和code2。

② 若code1|code2=0,直线完全在窗口内;若code1&code2≠0,直线则完全在窗口外。

③ 不满足②中的两种情况,此时直线既有在窗口内的部分也有在窗口外的部分。取一个窗口外的端点(编码不为0000)为p。

④ 根据p的编码从低位开始找编码值为1的地方,确定要求交的窗口边界,求出直线段与相应窗口边界的交点,用交点代替p。

⑤ 重复上述过程,直到找不到位于窗口外的点,算法结束。

代码实现:

  p1,p2为直线段两端点,剩余四个参数则对应窗口的四条边。文章来源地址https://www.toymoban.com/news/detail-465126.html

void Cohen-Sutherland(CPoint p1, CPoint p2, int x_min, int y_min, int x_max, int y_max)
{
	while (true)
	{
        //处理两端点的编码
		int code0 = 0;
		int code1 = 0;

		if (p1.x < x_min) code0 += 1;
		else if (p1.x > x_max) code0 += 2;
		if (p1.y < y_min) code0 += 4;
		else if (p1.y > y_max) code0 += 8;

		if (p2.x < x_min) code1 += 1;
		else if (p2.x > x_max) code1 += 2;
		if (p2.y < y_min) code1 += 4;
		else if (p2.y > y_max) code1 += 8;

		if ((code0 | code1) == 0)
		{
			cutLine(p1, p2); //对直线段简取之,直线段完全在窗口内
			break;
		}
		else if ((code0 & code1) != 0)
		{
			break; //直线段完全在窗口外,不进行裁剪,无操作
		}
		else
		{
			if (code0 == 0) //点在窗口内,交换两点以取另一个点
			{
				CPoint pt;
				pt = p1;
				p1 = p2;
				p2 = pt;
				int codet;
				codet = code0;
				code0 = code1;
				code1 = codet;
			}
			if (code0 & 1)
			{
				p1.y = int(p1.y + ((x_min - p1.x) * (p1.y - p2.y) / (p1.x - p2.x)) + 0.5);
				p1.x = x_min;
			}
			if (code0 & 2)
			{
				p1.y = int(p1.y + ((x_max - p1.x) * (p1.y - p2.y) / (p1.x - p2.x)) + 0.5);
				p1.x = x_max;
			}
			if (code0 & 4)
			{
				p1.x = int(p1.x + ((y_min - p1.y) * (p1.x - p2.x) / (p1.y - p2.y)) + 0.5);
				p1.y = y_min;
			}
			if (code0 & 8)
			{
				p1.x = int(p1.x + ((y_max - p1.y) * (p1.x - p2.x) / (p1.y - p2.y)) + 0.5);
				p1.y = y_max;
			}
		}
	}
}

到了这里,关于计算机图形学:直线段裁剪,Cohen-Sutherland算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机图形学】图形变换(以任意直线为对称轴的对称变换)

    模块3-2 图形变换 一 实验目的 编写图形各种变换的算法 二 实验内容 1 :任意直线的对称变换。要求将变换矩阵写在实验报告中,并与代码匹配。求对任意直线Ax+By+C=0的对称变换矩阵。 实验结果如下图所示: 1:预设图形初始化 2:鼠标左键点击直线起点 3:鼠标右键点击直线

    2024年02月01日
    浏览(43)
  • 计算机图形学05:中点BH算法对任意斜率的直线扫描转换方法

    作者 :非妃是公主 专栏 :《计算机图形学》 博客地址 :https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 专栏名称 专栏地址 软件工程 专栏——软件工程 计算机图形学 专栏——计算机图形学 操作系统 专栏——操作系统 软件测试 专

    2024年02月02日
    浏览(42)
  • 【Weiler-Atherton算法】 计算机图形学多边形裁剪算法

    源代码: https://github.com/ricar0/Weiler-Atherton-Alogrithm/tree/master 通常来说就是利用多边形来裁剪多边形的一种方法,一般情况下是利用矩形来裁剪凹凸多边形 凸多边形 凹多边形 上面红色划线部分就是裁剪出的部分 OPENGL基础语法 基本上就是一些画线和画多边形的操作,难度较低

    2023年04月09日
    浏览(37)
  • 计算机图形学头歌实训平台答案——CG1-v2.0-直线绘制

    1.本关任务 (1)根据直线DDA算法补全line函数,其中直线斜率0k1; (2)当直线方程恰好经过P(x,y)和T(x,y+1)的中点M时,统一选取直线上方的T点为显示的像素点。 2.输入 (1)直线两端点坐标:(13, 20)和(180,140); (2)直线颜色为白色。 3.输出 程序运行结果为一条直线,具体结果如下图所示:

    2024年02月06日
    浏览(40)
  • 初识计算机图形学

    笔记来源:【老奇】阴差阳错 撼动世界的游戏引擎 详见本人博客: 1.Transformation 2.梳理从MVP变换到光栅化的过程 MVP变换将空间中3D物体投影到2D屏幕 详见本人博客: 1.Rasterization(光栅化) 2.梳理从MVP变换到光栅化的过程 场景是一个个由三角面组成的模型 将模型投射到像素就

    2024年01月21日
    浏览(39)
  • 计算机图形学——大作业

    绘制一个简单的三维场景,可以是室内:卧室,办公室,教室,也可以是室外:运动场,公园等,加上光照效果,简单的纹理映射,透视投影;不能过于简单;可以加动画、鼠标和键盘交互。     上交材料: project和word文档(具体内容展示,思路和心得) 首先初始化窗口,

    2024年02月11日
    浏览(37)
  • 计算机图形与图像技术

    可以使用Python、Java等语言。 下图中,图中各事物比例失调 如何使用代码去掉某个人(不允许使用抠图工具)?         像素(Pixel)是“图像元素”的缩写, 指的是图像的最小单位 。 它是构成数码图像或屏幕显示图像的基本单元,代表了图像中的一个小点或一个小方块

    2024年02月07日
    浏览(39)
  • 计算机图形学 | 变换与观察

    华中科技大学《计算机图形学》课程 MOOC地址:计算机图形学(HUST) 回顾几何阶段 整体流程: 这其中存在3种变换: 坐标系的变换 模型本身的运动 观察者的运动 几何变换 以上各种变换都可以通过以下变换的复合来计算: 平移 比例 旋转 对称 错切 图形的几何变换是指对图

    2023年04月27日
    浏览(35)
  • 【计算机图形学01】坐标变换

             将坐标变换为标准化设备坐标,接着再转化为屏幕坐标的过程通常是分步进行的,也就是类似于流水线那样子。在流水线中,物体的顶点在最终转化为屏幕坐标之前还会被变换到多个坐标系统(Coordinate System)。将物体的坐标变换到几个 过渡 坐标系(Intermediate Coor

    2024年02月10日
    浏览(31)
  • 计算机图形学(三) -- 3D 变换

    同样引入齐次坐标: 3D 点 = ( x , y , z , 1 ) T (x, y, z, 1)^T ( x , y , z , 1 ) T 3D 向量 = ( x , y , z , 0 ) T (x, y, z, 0)^T ( x , y , z , 0 ) T 通常, ( x , y , z , w ) (x, y, z, w) ( x , y , z , w ) (w != 0) 表示一个坐标为 ( x / w , y / w , z / w ) (x/w, y/w, z/w) ( x / w , y / w , z / w ) 的 3D 点 用一个 4x4 的矩阵来表示

    2024年02月08日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包