在二维观察中,需要在观察坐标系下根据窗口大小对二维图形进行裁剪(clipping),只将位于窗口内的图形变换到视区输出。直线段裁剪是二维图形裁剪的基础,裁剪的实质是判断直线段是否与窗口相交,如相交则进一步确定直线段上位于窗口内的部分。

编码原理

Cohen-Sutherland直线段裁剪算法是最早流行的编码算法。每段直线的端点都被赋予一组四位二进制代码,称为区域编码(region code,RC),用来标识直线段端点相对于窗口边界及其延长线的位置。
假设窗口是标准矩形,由上、下、左、右4条边界组成,延长窗口的4条边界形成9个区域。这样根据直线段的任一端点P(x,y)所处的窗口区域位置,可以赋予一组4位二进制编码,称为区域码RC=C3C2C1C0。C0代表左边界, C1代表右边界, C2代表下边界, C3代表上边界。

为了保证窗口内及窗口边界上直线段端点的编码为零,定义规则如下:
C0:若端点的 x < wxl,则C0=1,否则C0=0。
C1:若端点的x > wxr,则C1=1,否则C1=0。
C2:若端点的y < wyb,则C2=1,否则C2=0。
C3:若端点的y > wyt,则C3=1,否则C3=0。

裁剪步骤

  1. 若直线段的两个端点的区域编码都为0,有RC0|RC1=0(二者按位相或的结果为零,即RC0=0且RC1=0),说明直线段的两个端点都在窗口内,应“简取”之(trivally accepted)。
  2. 若直线段的两个端点的区域编码都不为0,且RC0&RC1≠0(二者按位相与的结果不为零,即RC0≠0且RC1≠0),说明直线段位于窗外的同一侧,或左方、或右方、或上方、或下方,应“简弃”之(trivally rejected) 。
  3. 若直线段既不满足“简取”也不满足“简弃”的条件,则需要与窗口进行“求交”判断。这时,直线段必然与窗口边界或窗口边界的延长线相交分两种情况处理


P0点的编码为0010。P1点编码为0000。交点P在窗口边界上,编码为0000。 根据编码判断PP1被简取。
Cohen-sutherland算法的关键技术:在于总是要让直线段的一个顶点处于窗口之外,例如P0点。这样P0点到交点P的直线段必然不可见,故可以直接抛弃。

直线段必然与窗口边界或窗口边界的延长线相交,分两种情况处理。

裁剪直线段时,一般按固定顺序左(x=wxl),右(x=wxr)、下(y=wyb)、上(y=wyt)求解窗口边界与直线段的交点。

交点计算公式

对于端点坐标为P0(x0,y0)和P1(x1,y1)的直线段,
与窗口左边界(x=wxl)或右边界(x=wxr)交点的y坐标的计算公式为
y=k(x−x0)+y0y=k(x−x0)+y0y = k(x-x_0)+y_0
与窗口上边界(y=wyt)或下边界(y=wyb)交点的x坐标的计算公式为
x=y−y0k+x0x=y−y0k+x0x = \frac{y-y_0}{k} + x_0
其中,k=y1−y0x1−x0k=y1−y0x1−x0k = \frac{y_1-y_0}{x_1-x_0}

Cohen-Sutherland直线裁剪算法相关推荐

  1. 计算机图形学 学习笔记(四):直线裁剪算法:Cohen-Suther land,中点分割法,Liang-Barsky

    接上文 计算机图形学 学习笔记(三):多边形的区域填充算法,反走样算法 光栅图形学算法 本文主要讲解直线裁剪算法. 裁剪 使用计算机处理图形信息时,计算机内部存储的图形往往比较大,而屏幕显示的知识图形 ...

  2. 【计算机图形学 】Cohen-Sutherland 直线裁剪算法 | OpenGL+鼠标交互

    文章目录 其他计算机图形学实验 前言 代码借鉴 步骤 1.点的结构体 2. 创建用于裁剪的窗口并绘制 3.画点函数 4. Cohen-Sutherland 直线裁剪算法部分 4.1 判断点所在位置,生 ...

  3. 直线裁剪算法-Cohen-Sutherland算法

    裁剪:使用计算机处理图形信息时,计算机内部存储的图形往往较大,而屏幕显示的只是图形的一部分.因此需要确定图形哪些部分落在显示区内,哪些落在显示区外.这个选择的过程称为裁剪 1.点的裁剪 对任意点P(x ...

  4. 三种常用的直线裁剪算法

    屏幕窗口是一个矩形框,图形仅在框内显示,直线位于矩形框外的部分需要将其裁剪去除. 一.Cohen-Sutherland算法 该算法的主要思想是将区域进行编码,通过与.或运算来判断直线与框的位置关系. ...

  5. 实验二 实现中点分割直线段裁剪算法

    一.目的 1. 了解直线裁剪的基本原理和常用方法. 2. 掌握中点分割直线段裁剪算法的基本原理和步骤. 3. 使用C++.OpenGL编程实现如下内容:输入直线段的起始点和终止点坐标位置.用四边形模拟 ...

  6. Liang-Barsky直线段裁剪算法-C++实现(计算机图形学作业)

    #include<graphics.h>//梁式直线裁剪算法的程序,由于该方法用编程实现非常简单,在介绍时稍微简略一些 void Liang_Barsky(const int& x ...

  7. 计算机图形学(三):三维图形观察及应用(矩形窗直线段的裁剪算法)

    裁剪:使用计算机处理图形信息时,计算机内部存储的图形往往比较大,而屏幕显示的只是图形的一部分.因此需要确定图形哪些部分落在显示区内,哪些落在显示区外.这个选择的过程就称为裁剪. 最简单的裁剪方法是把各 ...

  8. 计算机图形学 裁剪算法

    裁剪算法 直线裁剪算法 暴力裁剪法 点的裁剪 线的裁剪 判断直线段与窗口的关系 三个算法 Cohen Sutherland算法/编码裁剪算法--通过二进制编码及运算,对直线与窗口的关系进行分类. 处理 ...

  9. 计算机图形学实验报告 裁剪,计算机图形学-实验报告三-图形裁剪算法

    <计算机图形学-实验报告三-图形裁剪算法>由会员分享,可在线阅读,更多相关<计算机图形学-实验报告三-图形裁剪算法(9页珍藏版)>请在人人文库网上搜索. 1.图形裁剪算法1. ...

最新文章

  1. 数据结构之二叉树(遍历、建立、深度)
  2. 4.HTTPS与HTTP的区别
  3. fcn+caffe+siftflow实验记录
  4. SLIC超像素分割详解(一)(二)(三)
  5. 苹果系统itunes连iphone连不上服务器,itunes不识别iphone,iPhone连接不上iTunes怎么解决?连接不上iTunes怎么办?...
  6. sdn主要包含哪些接口_SDN概述
  7. 如何在win7下安装XP系统?
  8. 裸机搭建深度学习服务器,ubuntu ssh服务器,pytorch, tensorflow, paddle三种框架安装。以及各种避雷。
  9. Electron应用-云桌面客户端
  10. java可以用数组存爬虫数据么_网络爬虫文件存取(TXT,JSON,CSV)特点与用法
  11. ffmpeg命令详细说明
  12. Nexus私服简介及搭建
  13. interview for chinaPay
  14. Python办公自动化实战 13 | Python-docx库:Python与Word的完美结合_学员考试准考证批量生成
  15. QT软件开发中的图标设置与好用的图标网站
  16. vibration-accelerate-velocity
  17. selenium之select
  18. Linux基础题库整理(选择,填空,简答)
  19. HoloLens开发笔记-制作传送门
  20. ChatGPT专业应用:生成外贸询盘邮件

热门文章

  1. OD调试3--reverseMe
  2. 微信小程序中使用字体库_小程序使用自定义字体库
  3. 阿里暑期实习二面3.28
  4. 美国学校数学计算机,美国计算机好的顶尖私立高中推荐~
  5. C语言编程>第二十五周 ② 下列程序中,函数fun的功能是:将大写字母转换为对应小写字母之后的第五个字母,若为小写字母为v~z,使小写字母的值减21,转换后的小写字母作为函数值返回。
  6. 梦幻新开服务器维护,梦幻西游:又要上线新地图吗?维护后换卡系统上线新场景成就...
  7. katalon studio录制WebUI自动化脚本
  8. 系统分析与设计作业(五):业务建模与活动图图绘制
  9. C语言 实现n*n的方阵,循环右移m位
  10. 程序员都应该使用的输入法设置