- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 
                        查看更多
                        
                    
                Lecture02-LineDrawing
                    What will we to do? 2.1.3 Bresenham算法 直线生成的算法中最有效的算法之一。 y k+1– y k is 0 or 1, denpending on the sign of parameter pk.   At starting position( x0 , y0 ), the first parameter p0 = 2?y – ?x。  We can summarize Bresenham line drawing for a line with a positive  slope less than 1 in the following listed steps.  1.Input the two line endpoints and store the left endpoint in ( x0 , y0 ). 2.Load ( x0 , y0 ) into the frame buffer; that is, plot the first point. 3.Calculate constants  ?x, ?y, 2?y and 2?y – 2?x, and obtain the starting    value for the decision parameter as p0= 2?y - ?x. 4.At each xk along the line, starting at k=0,perform the following test:    if pk0, the next point to plot is (xk+1, yk) and pk+1= pk+ 2?y    Otherwise, the next point to plot is (xk+1, yk+ 1 )and pk+1= pk+ 2?y – 2?x  5.Repeat step 4 ?x times.       程序如下: void BresenhamLine(xa,ya,xb,yb1)                             {                                         int dx=abs(xa-xb),dy=abs(ya-yb);                                      int p=2*dy-dx;                                      int twoDy=2*dy,twoDyDx=2*(dy-dx);                                      int x,y,xEnd; /*Determine which point to use as start, which as end*/ if (xaxb){x=xa;y=yb;xEnd=xb;}setPixel(x,y);  while(xxEnd){x++;                           if (p0)                           p+=twoDy;                           else{                                y++; p+=twoDyDx;}                            setPixel(x,y);                            }                         }                                 Midpoint Example Draw a line from (1, 2) to (5, 5)  dx = x1 – x0; dy = y1 – y0; d = 2 * dy – dx;	// d = F(m) = F(x0, y0+1/2) Einc = 2 * dy ; NEinc = 2 * (dy – dx);  x = x0; y = y0; Draw (x, y); While (x  x1) { 		if (d = 0)                  	d = d + Einc;                  	x = x + 1; 		else 				d = d + NEinc 				x = x + 1; 				y = y + 1; 		Draw (x, y); 	} 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 dx dy Einc NEinc d x y 4 3 2 Midpoint Example Draw a line fr
                
原创力文档
                        

文档评论(0)