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

最简单的裁剪方法是把各种图形扫描转换为点之后,再判断点是否在窗口内。

但判断图形中每个点是否在窗口内,太费时,一般不可取。为提高效率,提出直线段的裁剪。

直线段裁剪算法是复杂图形裁剪的基础。

直线段和裁剪窗口的可能关系(如下图所示):

  • 完全落在窗口内
  • 完全落在窗口外
  • 与窗口边界相交

要裁剪一条直线段,首先要判断(如下图所示):

  1. 它是否完全落在裁剪窗口内?
  2. 它是否完全在窗口外?
  1. 如果不满足以上两个条件,则计算它与一个或多个裁剪边界的交点(比如线段AB)。

常用的裁剪算法由三种,即 Cohen-Suther land、中点分割法、Liang-Barsky 裁剪算法。

Cohen-Suther land(编码裁剪算法)

算法的基本思想是对每条直线段分三种情况处理

(1)若点p1和点p2完全在裁剪窗口内,则保留该直线

(2)若点p1(x1,y1)和 p2( x2,y2 ) 均在窗口外,且满足下列四个条件之一,就可以舍弃这条直线了:

(3)如果直线段既不满足保留的条件,也不满足舍弃的条件?那么需要对直线段按交点进行分段,分段后判断直线是保留还是舍弃。(大部分直线都是这种情况)

对于上述第三种情况,则每条线段的端点都应该赋以4位二进制编码。编码规则如图所示:

这样共分成了9个区域,各区域的编码为:

在裁剪一条线段时,先求出端点 p1 和 p2 的编码 code1 和 code2,,然后进行二进制的“或”运算和“与”运算。再根据运算结果,判断线段是否保留

  1. 若 code1 | code2 =0 ,则保留此直线段
  2. 若 code1 & code2 !=0 ,则舍弃该线段
  1. 若上述两个两条均不成立,则需求出直线段与窗口边界的交点。再在交点处把线段一分为二,再进行处理(求出端点的编码后再进行二进制运算)

例子:

Cohen-Suther land 算法用编码的方法实现了对直线段的裁剪,比较适合两种情况:一是大部分线段完全可见,而是大部分线段完全不可见。

Cohen-Suther land 算法存在的问题:

直线裁剪算法:中点分割法

算法思想:和上面讲到的Cohen-Suther land 算法一样,首先对直线段的端点进行编码。

把线段和窗口的关系分成三种情况(和Cohen-Suther land 算法 差不多):

  1. 完全在窗口内
  2. 完全在窗口外
  1. 和窗口有交点

中点分割算法的核心思想是通过二分逼近(不停的求中点)来确定直线段与窗口的交点。

例子:比如求P1-P2线段。P3是它们的中点。

P3和P2不在图形内,然后再舍弃,再找中点。

注意

1、若中点不在窗口内,则把中点和离窗口边界最远点构成的线段丢掉,以线段上的另一点和该中点再构成线段,再来求中点

2、如中点在窗口内,则又以中点和最远点构成线段,并求其中点,直到中点与窗口边界的坐标值在规定的误差范围内相等

Liang-Barsky 裁剪算法(梁-Barsky算法)

在 Cohen-Suther land 算法提出后,梁友栋和Barsky 又针对标准矩形窗口提出了更快的 Liang-Barsky 裁剪算法。

梁算法的主要思想:

(1)用参数方程表示一条直线

(2)把被裁剪的红色直线段看成是一条有方向的线段,把窗口的四条边分成两类:

入边和出边

裁剪线段的起点是直线和两条入边的交点以及始端点三个点里最后面的一个点,即参数u最大的那个点;

裁剪线段的终点是直线和两条出边的交点以及终端点最前面的一个点,取参数u最小的那个点。

值得注意的是,当u从-∞到+∞遍历直线时,首先对裁剪窗口的两条边界直线(下边和左边)从外面向里面移动,

再对裁剪窗口两条边界直线(上边和右边)从里面向外面移动。

如果用u1,u2分别表示线段(u1≤u2)可见部分的开始和结束,则:

总结起来,Liang-Barsky算法的基本出发点是直线的参数方程。

(1)分析Pk=0的情况

如果还满足qk<0,

则线段完全在边界外,应舍弃该线段。

如果qk≥0

则进一步判断

(2)当pk≠0时:

当pk<0时:对应入边交点

当pk>0时:对应出边交点

一共四个u值,再加上u=0、u=1两个端点值,总共六个值

把pk<0的两个u值和0比较去找最大的,把pk>0的两个u值和1比较去找最小的,这样就得到两个端点的参数值

例子:

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

  1. 【计算机图形学】三维图形投影和消隐(正等轴测投影图 消隐图构造)

    模块4-2 三维图形投影和消隐 一 实验目的 编写三维图形各种变换的投影或消隐算法 二 实验内容 1:自行选择三维物体(不能选长方体),建立坐标系,给定点的三维坐标值,建立边表结构,完成正等轴测投影图 ...

  2. 计算机图形学之三维图形变换

    三维物体几何变换 同二维变换一样,三维基本几何变换都是相对于坐标原点和坐标轴j进行的几何变换:有平移.比例.旋转.对称和错切等 与二维变换类似,引入齐次坐标表示,即:三维空间中的某点变换可以表示成点的 ...

  3. 计算机图形学 | 欢迎来到图形世界

    计算机图形学 | 欢迎来到图形世界 计算机图形学 | 欢迎来到图形世界 1.1 初识图形学 计算机图形学 相关学科 发展历史 1.2 探秘图形应用与研究 有趣的图形应用 计算机辅助设计(Compute ...

  4. 计算机图形学三(补充):重心坐标(barycentric coordinates)详解及其作用

    重心坐标(Barycentric Coordinates) 1 重心坐标的定义及求解 1.1 基础定义 1.2 几何面积角度求解 1.3 坐标系角度求解 2 重心坐标的运用 Reference (本篇 ...

  5. 计算机图形学基础(OpenGL版)实验四 直线裁剪

    计算机图形学基础 实验四 直线裁剪 1.实验目的: 了解二维图形裁剪的原理(点的裁剪.直线的裁剪.多边形的裁剪),利用VC+OpenGL实现直线的裁剪算法. 2.实验内容: (1) 理解直线裁剪的原理 ...

  6. 计算机图形学直线段的生成算法

    计算机图形学直线段的生成算法C++实现,包括:DDA,中点画线,改进的Bresenham画线 文章目录 1.实验目的和内容 1.1实验目的 1.2实验内容 2.算法原理 2.1 DDA(数值微分算法) ...

  7. 计算机图形学实验二 《绘制任意斜率的直线》

    计算机图形学实验二 <绘制任意斜率的直线> 视频讲解地址 一.Bresenham算法 用视频讲会好点我之前也录过相关视频可以先凑合看 二.设计CLine类 之前也说了C++一个类是由源文件 ...

  8. 计算机图形学之空间坐标变化之三维图形观察及变换

    一.三维物体基本几何变换    主要讨论如下几个问题 : 如何对三维图形进行方向.尺寸和形状方面的变换 ? 三维物体如何在二维输出设备上输出 ? 通过三维图形变换,可由简单图形得到复杂图形,三维图形变 ...

  9. 计算机图形学二维图形基本变换实验原理,江苏大学-计算机图形学第三次实验报告-二维图形变换...

    <江苏大学-计算机图形学第三次实验报告-二维图形变换>由会员分享,可在线阅读,更多相关<江苏大学-计算机图形学第三次实验报告-二维图形变换(13页珍藏版)>请在人人文库网上搜索 ...

最新文章

  1. 最大公约数和最小公倍数的欧几里得算法
  2. ORA-01081: cannot start already-running ORACLE - shut it down first
  3. Visual studio 2017基本配置
  4. 【Groovy】xml 序列化 ( 使用 MarkupBuilder 生成 xml 数据 | 标签闭包下创建子标签 | 使用 MarkupBuilderHelper 添加 xml 注释 )
  5. 动点移动轨迹,猜猜这是曲线还是直线?
  6. python自学到大牛_开始学习Python+一位大牛整理的Python资源
  7. .NET 源代码的安全性(源代码工具真正比拼) (論)
  8. SQL HAVING 用法详解
  9. 打开含avi格式视频文件的文件夹“死机”问题的解决
  10. 国产硬件防火墙横向对比
  11. Kaleao推出基于ARM的服务器Kmax
  12. 音乐资源免费_3个免费的音乐研究在线资源
  13. 项目部署三---linux下Nginx安装
  14. JavaWeb(一)_JavaWeb开发入门
  15. P4 开发实践 — Overview
  16. Nvidia TX2 刷机全过程
  17. python 方差齐性检验_Python数据科学:正态分布与t检验
  18. Docker容器化实战第二课 镜像、容器、仓库详解
  19. 如我提升自我学习能力
  20. 谈谈数据库中的日期、时间、日期时间、时间戳

热门文章

  1. 联想sr550服务器怎么设置自动开关机,ThinkSystem联想sr550服务器网线插上不亮的解决方法...
  2. 矢量图形是指使用计算机合成的图像,江苏省计算机一级考试理论题
  3. ICMP与DHCP(包含DHCP的全局配置模式与接口配置模式)
  4. MAC IDEA安装与常用插件与环境配置
  5. python性能还是不错的
  6. 一位网友的互联网创业心得
  7. 无人车系统(五):轨迹跟踪Pure Pursuit方法
  8. No hardware target is open (xilinx )
  9. 八一八cvs vss svn和git比较
  10. chatGPT4.0-介绍Katalon Studio