计算机图形学——梁友栋-Barsky算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机图形学——梁友栋-Barsky算法
梁算法是计算机图形学上最经典的⼏个算法,也是⽬前唯⼀⼀个以中国⼈命名的出现在国内外计算机图形学课本的算法,我之前在介绍裁剪算法的时候介绍过这个算法
这⼏天复习图形学,发现当时那篇博客写的很空洞,⼀些关键性的推理式⼦讲的不是很清楚,于是在这⾥仔细介绍⼀下。

最近发现中国⼤学MOOC上中国农业⼤学的赵明教授讲的很不错,课程短⼩精悍,感兴趣的同学可以去看⼀下
⼀、直线的参数⽅程
梁算法表⽰直线是通过直线的参数⽅程来确定的,也就是说给出两个点,利⽤参数表⽰直线。

这⾥对U的理解就是(x,y)点在所给两点之间线段上的位置。

⼆、出边和⼊边
把被裁剪的红⾊直线段看 成是⼀条有⽅向的线段,把窗⼝ 的四条边分成两类:
⼊边和出边
⼊边:直线由窗⼝外向窗⼝内移动时和窗⼝边界相交的边(左边界和下边界)。

出边:直线由窗⼝内向窗⼝外移动时和窗⼝边界相交的边(右边界和上边界)。

裁剪结果的线段起点是直线和两条⼊边的交点以及始端点三 个点⾥最前⾯的⼀个点,即参数u最⼤的那个点;
裁剪线段的终点是和两条出边的交点以及端点最后⾯的⼀个 点,取参数u最⼩的那个点。

值得注意的是,当u从-∞到+∞遍历直线时,⾸先对裁剪窗⼝的两条边界直线(下边和左边)从外⾯向⾥⾯移动,再对裁剪窗⼝两条边界直线(上边和右边)从⾥⾯向外⾯移动。

如果⽤u1,u2分别表⽰ 线段(u1≤u2)可见部分的开始和结束
上⾯就是梁友栋先⽣的发现,但⼜有了新的问题:
如何判断出边和⼊边?
四个U值是如何求出来的?
判断线段某⼀部分是否在窗⼝内,可以简化为判断直线上⼀个点是否在窗⼝内的问题。

我们知道梁友栋算法的基本出发点是直线的参数⽅程,那么对于那些不会被裁剪掉的点⼀定会满⾜下⾯的不等式:
三、运算所⽤的量
将上⾯的不等式移项得:
在这⾥可以确定那些直线与裁剪窗⼝的交点中P K<0的点输⼊⼊边,P K>0的点属于出边
1)分析P k=0的情况
如果还满⾜q k<0
则线段完全在边界外,应舍弃该线段
如果q k≥0
则进⼀步判断
(2)当p k≠0时:
当p k<0时
线段从裁剪边界延长线的外部 延伸到内部,是⼊边交点
当p k> 0时
线段从裁剪边界延长线的内部 延伸到外部,是出边交点
线段和窗⼝边界⼀共有四个交点,根据p k的符号,就知道 哪两个是⼊交点,哪两个是出交点
当p k< 0时:对应⼊边交点
当p k> 0时:对应出边交点
⼀共四个u值,再加上u=0、u=1两个端点值,总共六个值
把pk<0的两个u值和0⽐较去找最⼤的,把pk>0的两个u值 和1⽐较去找最⼩的,这样就得到两个端点的参数值
四、⼩结
直线参数化
直线段看成是有⽅向的
把窗⼝的四条边分为⼊边和出边。

相关文档
最新文档