计算机图形学-直线裁剪算法
简弃
就是线段完全在窗口外
简取
直线完全在窗口内
Cohen-Suthland算法
核心思想
对直线段两端端点进行编码 再进行求或求与操作从而判断是否简弃或简取
将每条线段的端点都赋予四位二进制编码D3D2D1D0
若x<xleft 则D0= 1 否则D0 = 0
若x<xright 则D1= 1 否则D1 = 0
若x<xbotton 则D2= 1 否则D2 = 0
若x<x~ top~ 则D3= 1 否则D3 = 0
再将窗口变成9个区域
D0对应左边界
D1对应右边界
D2对应下边界
D3对应上边界
如果两条线段进行或运算|
code1|code2 = 0则对直线进行简取
如果两条线等进行与运算&
code1&code2 != 0则对指向进行简弃
当这两个条件都不满足是 就是不能简取或者简弃时
需要求出直线段和窗口边间的交点 在交点处把线段一分为二
再按 左 右 下 上的顺序求出直线段与窗口做边界的交点为p3
则p1p3必在窗口外 可简弃
重复对p2p3进行操作
优点
如果线段大部分在窗口外 或者大部分在窗口内 很少贯穿的线段 则效率很高
缺点
中点分割法
核心思想
与Cohen-Suthland算法类似 端两个端点进行编码
但是他与众不同的地方在于 求交方式是采用二分法逼近
不断地进行二分
几个情况
1.如果求得中点不在窗口内则将里窗口更远端的那个端点和中点所组成线段进行简弃 也就是上上面那张图中的p3和p2组成线段
2.如果中点在窗口内 则以中点和离窗口最远端点组成线段 并再求其中点 直到中点与窗口边界的坐标值在规定的误差范围内相等
Liang-Barsky裁剪算法
核心思想
用参数方程表示一条直线
x = x1 + u . (x2 - x1) = x1 +deltx . u 0 <= u <= 1
y = y1 + u . (y2 - y1) = y1 +delty . u 0 <= u <= 1
deltx = x2 - x1
(x1,y1) (x2,y2)是线段的两个端点
这里表示的是一个直线段 如果表示直线 u的范围就是负无穷到正无穷
u就是参数方程中的自变量
将线段看成有方向的 把窗口四条边分成两类
会发现直线和入边有两个交点 和出边有两个交点 一共六个点
入边交点和起始点三个点中取u值最大的那个点 也就是图中绿色的起始点作为裁剪线段的起始点
出边交点和终点三个点中取u值最小的那个点 也就是图中出边上那个粉红色的点作为裁剪线段的终点
点要在窗口内的条件
下面的式子是将他化简
再简化
u.Pk<=qk k = 1,2,3,4
结论
当Pk = 0 且qk < 0 时 线段完全在窗口外
也就是 deltx或者delty为0 表示这是一条竖直或者水平的直线
而qk<0表示起始端点在窗口的上边 左边右边 下边
当Pk != 0 且qk < 0 时 线段从外向内延伸
Pk != 0表示是一根斜线 qk<0表示起始点在窗口外 因为k一定要一致
当Pk != 0 且qk> 0 时 线段从内向外延伸
当Pk < 0 对应入边交点
当Pk >0 对应出边交点
找到裁剪线段的两个端点
交点u值为 uk = qk/pk
把Pk<0的两个交点u值和0(u值为0的是线段的起始点)这三个值进行比较 找最大的Umax (Umax是被裁剪后线段的起始点的u值)
把Pk>0的两个交点u值和1(u值为11=是线段的终点)这值进行比较 找最小Umin (Umin是被裁剪后线段的终点的u值)
若Umax>Umin则直线段在窗口外 删除该直线
若若Umax<=Umin则将 Umax和Umin代回直线参数方程 求出直线与窗口的两实交点坐标
裁剪步骤
1.获取两个端点坐标 和窗口边界值
2.若deltx == 0 则P1=P2 =0 进一步判断q1<0或q2<0
若满足则直线不在窗口内 直接简弃
若不满足 既 q1>=0或q2>=0则进一步计算Umax和Umin
3.同样计算delty同样步骤 也就是P3=P4=0的情况
4.若Pk!=0 则计算Umax和Umin
5.求得Umax和Umin 若Umax>Umin则线段在窗口外 否则将Umax和Umin代入参数方程 获取裁剪后起始点和终点坐标
x = x1 + u . (x2 - x1)
y = y1 + u . (y2 - y1)
例子
将Umax和Umin带入得(3,7)和(3,8)
计算机图形学-直线裁剪算法相关推荐
- 计算机图形学直线算法程序,计算机图形学直线生成算法实现.doc
计算机图形学直线生成算法实现.doc (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 实验二直线生成算法实现班级08信计学号80姓名 ...
- 计算机图形学直线裁剪原理,计算机图形学-3.2用Liang-Barsky算法实现直线段裁剪...
计算机图形学-3.2用Liang-Barsky算法实现直线段裁剪 计算机图形学-3.2用Liang-Barsky算法实现直线段裁剪 (1)算法设计原理 依次处理(p1,q1)(p2,q2)(p3,q3 ...
- 【计算机图形学|直线生成算法】中点画线法
文章目录 概述 一.基本思想 二.构造判别式: 三.递推出增量 优化: 总结: 四.例题分析 五.伪代码 概述 中点画线法(Midpoint Line Algorithm)是一种画线(Line Dra ...
- 计算机图形学 学习笔记(四):直线裁剪算法:Cohen-Suther land,中点分割法,Liang-Barsky
接上文 计算机图形学 学习笔记(三):多边形的区域填充算法,反走样算法 光栅图形学算法 本文主要讲解直线裁剪算法. 裁剪 使用计算机处理图形信息时,计算机内部存储的图形往往比较大,而屏幕显示的知识图形 ...
- 【计算机图形学 】Cohen-Sutherland 直线裁剪算法 | OpenGL+鼠标交互
文章目录 其他计算机图形学实验 前言 代码借鉴 步骤 1.点的结构体 2. 创建用于裁剪的窗口并绘制 3.画点函数 4. Cohen-Sutherland 直线裁剪算法部分 4.1 判断点所在位置,生 ...
- 计算机图形学直线算法论文,《计算机图形学》中直线生成算法的教学心得
摘要:<计算机图形学>是计算机科学与技术专业一门重要的专业课,其中直线生成算法是教学重点之一.该文通过分析几种直线生成算法的特点,阐述了理论教学和实践教学的重点和难点,总结了教学的体会和心 ...
- 计算机图形学直线段的生成算法
计算机图形学直线段的生成算法C++实现,包括:DDA,中点画线,改进的Bresenham画线 文章目录 1.实验目的和内容 1.1实验目的 1.2实验内容 2.算法原理 2.1 DDA(数值微分算法) ...
- 计算机图形学之光线跟踪算法的研究与实现2017年我的优秀毕业论文
计算机图形学之光线跟踪算法的研究与实现2017年我的优秀毕业论文 版权所有使用者请联系我 刘创 QQ:903188593 2.2.2 Phong光照模型 事实上对于漫反射的物体表面,使用Lambert ...
- 计算机图形学曲线算法代码,计算机图形学自由曲线绘制算法.doc
计算机图形学自由曲线绘制算法 宁夏师范学院数学与计算机科学学院 <>实验报告 实验序号: 实验项目名称: 学 号姓 名专业.班实验地点指导教师时 间.实验内容与步骤 1 //TestVie ...
- 计算机图形学E7——裁剪-交互式Liang-Barskey矩形窗口裁剪直线
其他计算机图形学实验见 链接 #include<GL/glut.h> #include<iostream> #include<algorithm> #include ...
最新文章
- 北大网络教育计算机作业,北大网络教育(计算机专业)网络基础作业答案.doc
- 迷宫搜索问题最短路_[源码和文档分享]基于C语言实现的勇闯迷宫游戏
- python打开是什么颜色-python实现简单颜色识别程序
- 【连载】物联网全栈教程-从云端到设备(十三)---安装单片机编译环境
- postman api
- 移动智能家庭终端技术规范学习总结
- 在SunOS5.8/solaris7上使用Xerces-C解析器
- php 数据透视表,php – 使用Laravel模型过滤数据透视表数据
- [转]javascript小技巧,超强推荐
- js url解码gbk_JS中对URL进行转码与解码
- linux awk 脚本格式,偷偷学习shell脚本之awk编辑器
- c语言max比较字符串,c语言中能不能用max函数求三个数的最大者呢?
- ffmpeg的那点小事儿--编译ffmpeg同时支持libx264(视频编码)和libfdk(音频编码)
- solid works旋转、抽壳的应用
- 【AP/AR】借项通知单和贷项通知单的区别
- 尚硅谷-Dubbo篇
- 呀!原来这就是前端监控系统
- mysql查询昨天、明天、近两天、近三十天等数据
- 机器学习期末简答总结
- 漫画图解 ElasticSearch 搜索原理