- 1、本文档共247页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机图形学 全套课件知识讲稿.ppt
计算机图形学;第一章 计算机图形学概述;计算机图形学的研究内容(1/2);计算机图形学的研究内容(2/2);第二章 图形算法基础;DDA算法;例:画直线段P0(0,0)--P1(5,2)
;直线DDA算法的VC代码;直线DDA算法VC代码; 采用增量计算,对于每一列,只要检查一个误差项的符号。
原理: 直线与垂直网格线求交点,交点最近的象素。
d0=0, d=d0+m (m为直线斜率) (假设m<1) 。;为方便计算,令d=m-0.5, 2d=2m-1
2d*dx=2*dy-dx d=2*dy-dx
递增量当d≥0时,递增量为2*dy-2*dx(见书P13)
d0时,递增量为2*dy;例:Line: P0(0, 0), P1(5,2)
dy=2,dx=5,d0=-1,ddl=-6,dxl=4
x y d
0 0 -1 +4
1 0 3 -6
2 1 -3 +4
3 1 1 -6
4 2 -5 +4
5 2 -1 ;void BresenhamLine(int xs,int ys,int xe,int ye)
{
int dx,dy,tx,ty,inc1,inc2,d,curx,cury;
dx=abs(xe-xs);
dy=abs(ye-ys);
if(dxdy){ iTag=1;
Swap(x1, y1);
Swap(x2, y2);
Swap(dx, dy); }
SetPixel(cury, curx);
tx=(x2-x1)0?1:-1;
ty=(y2-y1)0?1:-1;
; curx=xs;cury=ys;
inc1=2*dy;inc2=2*(dy-dx);d=inc1-dx;
while(curx!=x2)
{
curx+=tx;
if(d0){d+=inc1; }
else {cury+=ty; d+=inc2; }
SetPixel(curx, cury);
}
}
;Bresenham算法的优点是:
1、不必计算直线之斜率,因此不做除法;
2、不用浮点数,只用整数;
3、只做整数加减法和乘2运算,而乘2运算可以用硬件移位实现。
Bresenham 算法速度很快,并适于用硬件实现。
; Bresenham 画线例
直线端点为(20,10)和(30,18), 用 Bresenham 法画线
解: Dx = 10, Dy = 8, d0=2* Dy- Dx=6,
ddl=2 Dy - 2Dx =-4, dxl=2Dy =16
若d0
d=d+2*Dy =d+16
若d=0
d = d +2*Dy -2*dx = d-4
;Bresenham 画线例
直线端点为(20,10)和(30,18)
画初始点(20, 10), 并根据判别式确定沿线段路径的后续像素位置如下表:;2.1.3中点算法;2.1.3中点画线法;2.1.3中点画线法;2.1.3中点画线;void Midpoint Line (int x0,int y0,int x1, int y1,int color)
{ int a, b, d1, d2, d, x, y;
a=y0-y1, b=x1-x0, d=a+a+b; //即d0
d1=a+a, d2=a+a+b+b; // d1为右上方点判断式增量 d2为右方点判断式增量
x=x0, y=y0;
SetPixel(x, y, color);
while (xx1)
{
if (d0) {x++, y++, d+=d2; }
else {x++, d+=d1;}
SetPixel (x, y, color);
} /* while */
} /* mid PointLine */
;2.2圆弧画法;2.2圆弧画法;2.2圆弧画法;2.2圆弧画法;2.2圆弧画法;2.2.1圆弧中点画法;若 d0, 则取P1为下一象素,而且再下一象素的判别式为:;圆弧中点算法过程;2.2.2圆
文档评论(0)