计算机图形学学习记录(三)

第三章 直线、圆、椭圆生成算法

图形的扫描转换(光栅化):确定一个像素集合,用于显示一个图形的过程。步骤如下:

(1)确定有关像素

(2)用图形的颜色或其他属性,对像素进行写操作。

对一维图形,不考虑线宽,则用一个像素宽的直线来显示图形。二维图形的光栅化,即区域的填充:确定像素集,填色或图案。

任何图形的光栅化,必须显示在一个窗口内,否则不予显示。即确定一个图形的那些部分在窗口内,那些在窗口外,即裁剪。

图形显示前需要:扫描转换+裁剪         常使用的顺序为:先裁剪,后扫描转换。

一、直线

直线的扫描转换:确定最佳逼近于直线的一组像素,并且按扫描线顺序,对这些像素进行写操作。

常用算法:数值微分法(DDA) ,中点画线法 ,Bresenham算法。

增量算法:在一个迭代算法中,如果每一步的X、Y值是用前一步的值加上一个增量来获得,则成为增量算法。

①DDA    

y=kx+b       斜率为判别式    |k|<=1  或者  |k|>1 分情况讨论  增量为k

缺点:y,k必须是float,且每一步都必须对y进行舍入取整,不利于硬件实现。              int(a+0.5)  类似于四舍五入

②中点画线法

ax+by+c=0  利用中点在线的上、下或之上来判定    解决了上述DDA的缺点。


③Bresenham算法

将右边点、右上点带入直线方程中,做比较

总结:都是为了是运算不再是float,而是整型,减少舍入,只包含整数运算,提高效率。

二、圆的扫描转换算法 

x2+y2=R2

其中,通过逆时针来分割圆为八份,称为8分圆,只讨论画其中一个8分圆的画法(也就是45度~90度的圆),其他同理。

中点画圆法:类似于同上   利用中点带入方程判断该中点在圆上、下、还是之上。

Bresenham算法:同上  判别式也是右边点、右下点带入方程做比较,看谁离圆更近。

生成圆弧的正负法:

生成圆弧的多边形逼近法:包括,圆的内接正多边形逼近法和圆的等面积正多边形逼近法。

三、椭圆的扫描转换

F(x,y)=b2x2+a2y2-a2b2=0

由于椭圆与圆有区别,根据椭圆的对称性,只考虑第一象限的圆弧的生成,因此,还需分为两部分来求解,以切线斜率为-1的点作为分解点。

椭圆上的一点的法向量:N(x,y)=(F)'xi+(F)'yi=2b*bxi+2a*ayi

于是,要求斜率为-1的点,说明该点的法向量为1 ,所以 2b*bxi=2a*ayi

首先得判定上下部分,上部分法向量的y分量大,下部分法向量的x分量大。

椭圆的中点画法:

 


本章总结:各种方法大概都是通过分析关键的判别式,然后求这个增量算法的每步的增量,同时还要计算初始值,然后进行迭代,最终画出图形。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值