屏幕窗口是一个矩形框,图形仅在框内显示,直线位于矩形框外的部分需要将其裁剪去除。

一.Cohen-Sutherland算法

该算法的主要思想是将区域进行编码,通过与、或运算来判断直线与框的位置关系。

当点的x<Xleft:D0=1,否则D0=0;        当点的x>Xright:D1=1,否则D1=0;

当点的y<Ybottom:D2=1,否则D2=0;  当点的y>Ytop:D3=1,否则D3=0;

矩形方框一共将区域分成了9个区域,根据D3D2D1D0顺序编码情况如下:

当code1|code2=0时,说明线段位于框内,保留。

当code1&code2≠0时,说明线段位于框外,舍弃。

若以上两个条件均不满足时,需要计算线段与边框线的交点,交点有实交点和虚交点,对实交点进行保留虚交点进行舍弃。实交点又分为1个实交点和2个实交点,1个实交点情况:只需将实交点和框内交点连线即可;2个实交点:2个实交点连线即可。

二.中点分割法

中点分割法是基于Cohen-Sutherland算法,主要思想仍为编码。其主要的不同之处在于在求交点是用中点逼近的思想。

三.Liang-Barsky算法

直线段方程:

根据以上四个公式可以求得4个u值,根据u值的大小关系可得,所得交点的位置关系。

线段AB的方向为由A指向B,令Xleft和Ybottom为入口,则取max{u1、u2、u3=0};令Xright和Ytop为出口,则取min{u4、u5、u6=1},最终获得的两点即为目标点。

三种常用的直线裁剪算法相关推荐

  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直线裁剪算法

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

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

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

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

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

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

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

  8. 光栅图形学算法基础其二 (裁剪算法)

    光栅图形学算法的研究内容      直线段的扫描转换算法 多边形的扫描转换与区域填充算法 直线裁剪算法 反走样算法 消隐算法 一.裁剪简述         使用计算机处理图形信息时,计算机内部存储的图 ...

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

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

最新文章

  1. SAP Cloud for Customer(C4C)和微软Outlook的集成
  2. 在Win10删除Ubuntu时直接删除分区后,如何删除启动项(EFI)
  3. c语言煎饼问题算法,C煎饼分类程序?
  4. windows文件保护_Windows系统下媲美时间机器的系统备份工具,统统免费
  5. Python中的@property Decorator:其用例,优点和语法
  6. JavaScript高级程序设计读书笔记(第5章引用类型之Array类型)
  7. linux命令行安装libxml,Ubuntu 14.04下libxml2的安装和使用
  8. is present but cannot be translated into a null value due to being declared as a primitive type
  9. 简述prototype, _proto_, constructor三者的关系
  10. JAVA读取配置文件工具类
  11. 2021年中国研究生数学建模竞赛D题——抗乳腺癌候选药物的优化建模
  12. Win必备神器Cmder
  13. Python+Django开发游戏充值管理后台
  14. mysql按月创建分表_MySQL之按月拆分主表并按月分表写入数据提高数据查询速度...
  15. Yocto系列讲解[理论篇] 45 - bb文件中函数实操演示(3)继承自己的class
  16. 双路cpu比单路强多少_关于CPU单核单路/双路和双核双路的区别
  17. 对ashx请求用Gzip,Deflated压缩
  18. php解压有密码的zip,linux下解压有密码的rar压缩包的方法
  19. 亲民地理38期-江西极顶武功山(上)
  20. linux pcs 所有命令,BaiduPCS-Go Windows或linux下百度网盘cmd命令行详细使用方法

热门文章

  1. excel分类_利用Excel快速进行SEO关键词分类
  2. [BLE]CC2640之ADC功能实现和供电电压的采集
  3. 星期六没节目,只好英语写程序!英语快学,76-85句
  4. GsonFormat.jar下载与安装
  5. java比较Date时间的先后顺序
  6. 深入Android系统(七)Zygote进程
  7. 智慧政务大厅解决方案(附PPT下载)
  8. 字节跳动的长视频谜雾
  9. Qt鼠标滚轮、左键按下并移动事件
  10. HDFS原理深入理解