图形的扫描转换(光栅化):确定一个像素集合,用于显示一个图形的过程。1. 确定有关像素;2. 对像素进行写操作。
一、直线的扫描转换
- 直线的扫描转换是在屏幕像素点阵中确定**逼近于理想直线的像素点集的过程。
- 常用算法:数值微分算法DDA;中点Bresenham画线算法。
数值微分算法(DDA):增量思想

讯享网
中点Bresenham画线算法
- Jack Elton Bresenham是IBM的科学家,他最知名的一项创新就是Bresenham直线算法。
- 算法原理
设给定直线起点坐标为
,终点坐标为 
则直线的隐函数方程为:
直线斜率为:
直线在水平方向上的位移:
直线在垂直方向上的位移:
假定:
,则确定x方向为主位移方向
每次在主位移方向上移动,另一个方向则根据中点误差项的值决定是否移动


- 递推公式
当
时: 
当
时:: 
中点误差项的初始值
,第一个中点坐标是M(
),则
为:


总结
- 首先,确定主位移方向;
- 计算
; - 计算
的递推公式;
二、圆的扫描转换
- 圆的扫描转换是在屏幕像素点阵中确定**逼近于理想圆的像素点集的过程。
- 算法原理
圆心在原点,半径为R的圆方程的隐函数表达式为:
根据圆的对称性,可以用四条对称轴 x=0, y=0, x=y, x=-y 把圆分成8等份。
绘制出第一象限内的1/8圆弧,根据对称性就可绘制出整圆,这称为八分法画圆算法。
![x\in \left [ 0,\frac{R}{\sqrt{2}} \right ]](https://51itzy.com/uploads/202412/23/d8d6e00325d3a7fb.jpg)
构造中点误差项
因此,
, 
- 递推公式
当
时, 
当
时, 

void CTestView::MBCircle(double R,CDC *pDC) { double x,y,d; d=1.25-R;x=0;y=R; for(x=0;x<=y;x++) { CirclePoint(x,y,pDC); //调用八分法画圆子函数 if(d<0) d+=2*x+3; else { d+=2*(x-y)+5; y--; } } } void CTestView::CirclePoint(double x,double y,CDC *pDC) //八分法画圆子函数 { //圆心坐标 CP2 pc=CP2((p0.x+p1.x)/2.0,(p0.y+p1.y)/2.0); //定义圆的边界颜色 COLORREF dr=RGB(0,0,255); pDC->SetPixelV(Round(x+pc.x),Round(y+pc.y),clr);//x,y pDC->SetPixelV(Round(y+pc.x),Round(x+pc.y),clr);//y,x pDC->SetPixelV(Round(y+pc.x),Round(-x+pc.y),clr);//y,-x pDC->SetPixelV(Round(x+pc.x),Round(-y+pc.y),clr);//x,-y pDC->SetPixelV(Round(-x+pc.x),Round(-y+pc.y),clr);//-x,-y pDC->SetPixelV(Round(-y+pc.x),Round(-x+pc.y),clr);//-y,-x pDC->SetPixelV(Round(-y+pc.x),Round(x+pc.y),clr);//-y,x pDC->SetPixelV(Round(-x+pc.x),Round(y+pc.y),clr);//-x,y }
讯享网
三、反走样技术
走样(Aliasing):由离散量表示连续量引起的失真;走样是理想直线扫描转换后的必然结果,不可避免,只能减轻。
反走样/抗锯齿(Anti-Aliasing,AA):用于减轻走样现象的技术。一类是硬件技术,一类是软件技术。
硬件技术:提高显示器分辨率,不是理想的反走样技术;
软件技术:加权区域采样
Wu反走样算法:根据像素和理想直线的距离对响铃两个像素的亮度等级进行调节。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/116173.html