计算机图形学实验教程.doc
(27页)

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!
9.90 积分
计算机图形学实验教程信息科学与工程系实验名称实验一 直线生成算法实验二 圆的生成算法实验三 椭圆的生成算法实验四 多边形填充算法实验五 二维图形的几何变换实验六 常用曲面和曲线的生成算法实验七 常用消隐算法实验八 曲线和曲面算法的应用实验九 真实感图形生成实验一、直线生成算法数值微分法 (DDA画线算法)vDDA-Digital Differential Analyzerv设直线两端点为:P1(x1,y1)及 P0(x0,y0),v则直线斜率为则直线方程为 当 k1 ,y每增加1,x 最多增加1 (或增加小于1) 。DDA算法:复杂度:加法+取整优点:避免了y=kx+b 方程中的浮点乘法,比直接用点斜式画线快缺点:需浮点数加法及取整运算,不利于硬件实现.上机实验一题目:编写用DDA画线算法画线算法的程序。要求:1。写出DDA画线算法的基本思想和公式。并叙述其优缺点。2。编写用DDA画线算法的程序。并比较其结果。3。写出上机报告中点画线法v设00if m >0(即P点在直线上方) then F(x,y+yb)<0; if m0;定义决策变量: d= F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c如果 d>0,则M在理想直线上方,选正右方E点如果 d0).,则新的中点M仅在x方向加1,新的d值为:dnew=F(xi+2,yi+0.5)=a(xi+2)+b(yi+0.5)+c而 dold=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+cdnew=dold+a= dold-dy2.如由pi点确定是右上方NE点(d=0dnew=dold-2(dy-dx) 当dold<0Bresenham画线算法 与DDA算法相似, Bresenham画线算法也要在每列象素中找到与理想直线最逼近的象素点。 根据直线的斜率来确定变量在x或y方向递增一个单位。另一个方向y或x的增量为0或1,它取决于实际直线与最接近网格点位置的距离。这一距离称为误差。算法的巧妙构思,使每次只需检查误差项(增量)的符号即可。 定义决策变量 d = d+k (01时, 让d=d-1,以保证0<=d<1 d0=0定义决策变量 d = d+k (01时, 让d=d-1,以保证0<=d<1 定义决策变量 e = d-0.5 (00时, 让e=e-1, (重新初始化误差项)由于算法只用到误差项的符号,为了改用整数以避免除法,可以作如下替换: e = 2*e*dx定义决策变量 e = 2*e*dx, e0 = - dx; e=e +2*dy则下一点为: (x+1,y) (e =0); 当e >0时, 让 e= e - dx, (重新初始化误差项)上机实验题目:编写用DDA画线算法,中点画线算法和Bresenham画线算法的程序。要求:1。写出DDA画线算法,中点画线算法和Bresenham画线算法的的基本思想和公式。并比较其特点。2。编写用DDA画线算法,中点画线算法和Bresenham画线算法的程序。并比较其结果。3。写出上机报告。省略部分。;Q0=[-200,100];Q1=[-100,120];');P0=[100,400];P1=[200,450];Q0=[-200,100];Q1=[-100,120];count=1000; deltat=1/count;t=0.0;PX(1)=P0(1); PY(1)=P0(2);for i=1:count t=t+deltat; F3=2*t*t*t-3*t*t+1; F2=-2*t*t*t+3*t*t; F1=t*t*t-2*t*t+t; F0=t*t*t-t*t;PX(i+1)=F3*P0(1)+F2*P1(1) +F1*Q0(1)+F0*Q1(1); PY(i+1)=F3*P0(2)+F2*P1(2) +F1*Q0(2)+F0*Q1(2);endfigure;plot(PX,PY,PX,PY,'o');title('P0=[100,400];P1=[200,450];Q0=[-200,100];Q1=[-100,120];');Bezier曲线(以逼近为基础的参数曲线)满足以下条件的一组折线集(Bezier 特征多边形)称为Bezier曲线:曲线的起点和终点与多边形的起点和终点重合,多边形的第一条边和最后一条边表示曲线在起点和终点的切矢量方向。曲线的形状趋向于Bezier特征多边形的形状.当给定Bezier 特征多边形的n+1个顶点Pi时, Bezier曲线的插值公式为 :(权Bi,n(t) i=0,1,2,3,…n+1称为基函数)。Bernstein(伯恩斯坦)基函数(调合函数)三次Bezier曲线矩阵表示调合函数P0=[100,100];P1=[200, 450];P2=[400,600];P3=[500,150];count=100; deltat=1/count; t=0.0;PX(1)=P0(1); PY(1)=P0(2);for i=1:count t=t+deltat; B0=1-3*t+3*t*t-*t*t*t; B1=3*t-6*t*t+3*t*t*t; B2=3*t*t-3*t*t*t; B3=t*t*t;PX(i+1)=B0*P0(1)+B1*P1(1) +B2*P2(1)+B3*P3(1); PY(i+1)=B0*P0(2)+B1*P1(2) +B2*P2(2)+B3*P3(2); endfigure;plot(PX,PY,PX,PY,'o');title('P0=[100,100];P1=[200,150];P2=[-200,100];P3=[-100,120];');B样条曲线当给定特征多边形的n+1个顶点Pi(i=0,1,2,..,n)时,K次B样条曲线的插值公式为 :(权Ni,k(u) i=0,1,2,3,…n+1称为基函数,即调合函数)。三次B样条曲线矩阵表示%三次均匀B样条曲线.clear;clc;P1=[0,0]; P2=[1,1]; P3=[2,2]; P4=[4,0];P5=[6,-4]; P6=[8,-5]; P7=[10,2];t=0.0;count=1000;deltat=1/count;%绘制第一段曲线for i=1:count+1 B0=(-t*t*t+3*t*t-3*t+1)/6; B1=(3*t*t*t-6*t*t+4)/6; B2=(-3*t*t*t+3*t*t+3*t+1)/6; B3=t*t*t/6; PX(i)=B0*P1(1)+B1*P2(1) +B2*P3(1)+B3*P4(1); PY(i)=B0*P1(2)+B1*P2(2) +B2*P3(2)+B3*P4(2); t=t+deltat;endfigure;plot(PX,PY,‘blue’);函数hold on;PXX=[P1(1),P2(1),P3(1),P4(1)];PYY=[P1(2),P2(2),P3(2),P4(2)];plot(PXX,PYY,':red',PXX,PYY,'o');%绘制第2 段曲线t=0.0;for i=1:count+1 B0=(-t*t*t+3*t*t-3*t+1)/6; B1=(3*t*t*t-6*t*t+4)/6; B2=(-3*t*t*t+3*t*t+3*t+1)/6; B3=t*t*t/6; PX(i)=B0*P2(1)+B1*P3(1) +B2*P4(1)+B3*P5(1); PY(i)=B0*P2(2)+B1*P3(2) +B2*P4(2)+B3*P5(2); t=t+deltat;endplot(PX,PY,'red');PXX=[P2(1),P3(1),P4(1),P5(1)];PYY=[P2(2),P3(2),P4(2),P5(2)];hold on;plot(PXX,PYY,':red',PXX,PYY,'o');%绘制第3段曲线t=0.0;for i=1:count+1 B0=(-t*t*t+3*t*t-3*t+1)/6; B1=(3*t*t*t-6*t*t+4)/6; B2=(-3*t*t*t+3*t*t+3*t+1)/6; B3=t*t*t/6; PX(i)=B0*P3(1)+B1*P4(1) +B2*P5(1)+B3*P6(1); PY(i)=B0*P3(2)+B1*P4(2) +B2*P5(2)+B3*P6(2); t=t+deltat;endplot(PX,PY,'blue');PXX=[P3(1),P4(1),P5(1),P6(1)];PYY=[P3(2),P4(2),P5(2),P6(2)];hold on;plot(PXX,PYY,':red',PXX,PYY,'o');%绘制第4段曲线t=0.0;for i=1:count+1 B0=(-t*t*t+3*t*t-3*t+1)/6; B1=(3*t*t*t-6*t*t+4)/6; B2=(-3*t*t*t+3*t*t+3*t+1)/6; B3=t*t*t/6; PX(i)=B0*P4(1)+B1*P5(1) +B2*P6(1)+B3*P7(1); PY(i)=B0*P4(2)+B1*P5(2) +B2*P6(2)+B3*P7(2); t=t+deltat;endplot(PX,PY,'red');PXX=[P4(1),P5(1),P6(1),P7(1)];PYY=[P4(2),P5(2),P6(2),P7(2)];hold on;plot(PXX,PYY,':red',PXX,PYY,'o'); 关 键 词: 实验 图形 教程 计算机
天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
本文档详细介绍了计算机图形学中几种基本的图形生成算法,包括DDA、中点画线法和Bresenham画线算法,并通过MATLAB程序展示了它们的实现过程。此外,还探讨了Bezier曲线和B样条曲线的数学原理和矩阵表示,以及如何通过参数化插值公式来生成这些曲线。实验旨在帮助读者深入理解图形生成算法的工作原理及其在实际应用中的效果。

362

被折叠的 条评论
为什么被折叠?



