- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机图形学(第三章new)课件
第三章 二维图形生成技术;主要内容;3.1 直线的生成算法;;;要求:
– 直,取决于画线算法
– 宽度,颜色要均匀,宽度和角度无关
– 终点处要精确
由绘图设备精度及算法造成的累计误差导致
– 快速:
浮点整数除法加法,减法位运算
;直线画法分类; DDA数值微分(分析)法;; double m = (y2-y1)/(x2-x1);//不考虑竖直直线
double b = (double)(x2*y1-x1*y2)/(x2-x1);
for( x = x1; x = x2; x++ )
{
y = m*x+b;
//y = y1 + (double)(x-x1)*(y2-y1)/(x2-x1);
dc.SetPixel(x,y,RGB(0,0,0));
};;(x1,y1),(x2,y2)
理想直线相邻两点的关系
;;;;缺点;3.1.2 正负法(中点法);正负法的具体实现;正负法算法的具体实现;正负法算法;0 1 2 3 4 5 6;正负法程序;3.1.3 Bresenham 算法;在沿着 x 轴单位步进时, 在上下y 坐标之间进行选择;
因为光栅化,y 只能取整数,y 的增加1
选择的原则是看精确值y与yi及yi+1的距离d1及d2的大小而定;y = m(xi+1) + b
d1 = y - yi
d2 = yi+1 - y;1. 画点(x1, y1); dx=x2-x1; dy=y2-y1;
计算误差初值P1 = 2dy - dx; i=1;
2. 求直线的下一点位置:
xi+1=xi+1;
if Pi0 则yi+1=yi+1;则 yi+1=yi;
3. 画点(xi+1, yi+1);
4. 求下一个误差Pi+1;
if Pi0 则Pi+1=Pi+2dy-2dx;则 Pi+1=Pi+2dy;
5. i=i+1; if idx+1 则转2;否则end。
;铬狈滔靠洋枕轧兢彬捆悯壤忌疫茁护堪钾亥攒镍环圣幢鸥哦拭谓烩栈蠕绞计算机图形学(第三章new)课件计算机图形学(第三章new)课件;囚梨书稀珠胖让屎坚存姚浚俊颊窜办丘赎饶拈乱霍汛索边佐琴且钠具碌泳计算机图形学(第三章new)课件计算机图形学(第三章new)课件;Bresenham算法的优点是:;3.2 圆的生成算法;void CDrawDemoView::Circle(int x0,int y0,int r,int)
{ for(x=0;x=sqrt(2.0)/2.0*r;x++)
{y=sqrt(r*r-x*x);CirPot(x0,y0,x,y); }}
void CDrawDemoView::CirPot(int x0, int y0, int x, int y)
{ SetGrid(x0+x, y0+y, Color);
SetGrid(x0+y, y0+x, Color);
SetGrid(x0+y, y0-x, Color);
SetGrid(x0+x, y0-y, Color);
SetGrid(x0-x, y0-y, Color);
SetGrid(x0-y, y0-x, Color);
SetGrid(x0-y, y0+x, Color);
SetGrid(x0-x, y0+y, Color);};极坐标法
x=xc+r·cosθ
y=yc+r·sinθ
利用对称
三角函数,计算量大;中点画圆法
在1/8圆弧上取x方向按单位像素递增时,每个对应的y的取值
下一个绘制点只
有两种可能
;中点画圆算法思想
定义一个圆函数
fcircle(x,y)=x2+y2-r2
0, (x,y)位于圆内
fcircle(x,y) =0, (x,y)位于圆上
0, (x,y)位于圆外
决策项p为圆函数fcircle(x,y)在中点的值
pk= fcircle(xk+1,yk-1/2)
采用增量运算计算 pk+1
决策项初始值 p0=1.25-r
;中点画圆算法描述
输入圆半径r和圆心坐标(xc,yc),并得到圆周上的第一个点像素点(0,r);
计算决策项初始值p0=5/4-r;
在每个xk位置,从k=0开始,完成下列检测:
如果pk0,圆心在(0,0)点的下一个像素点为(xk+1,yk)
文档评论(0)