《计算机图形学实验报告-实验3Bezier曲线》由会员分享,可在线阅读,更多相关《计算机图形学实验报告-实验3Bezier曲线(4页珍藏版)》请在人人文库网上搜索。
1、计算机图形学实验报告班级 计算机工硕班 学号 姓名 王泽晶 实验三:Bezier曲线实验目的:通过本次试验,学生可以掌握Bezier 曲线的求值、升阶算法及Bezier曲线绘制方法。实验内容:1. 绘制控制多边形(使用鼠标左键指定多边形顶点,右键结束),使用白色折线段表示。2. 绘制Bezier曲线,使用红色,线宽为2,在右键结束控制多边形顶点指定时即执行。Bezier曲线是一种广泛应用于外形设计的参数曲线,它通过对一些特定点的控制来控制曲线的形状,我们称这些点为控制顶点。现在我们来给出Bezier曲线的数学表达式。在空间给定个点,称下列参数曲线为次Bezier曲线:其中是Bernstein基。
2、函数,其表达式为:,接着我们讨论3次Bezier曲线,我们也采用将表达式改写为矩阵形式的方法,我们得到:试验步骤:添加成员函数,编写成员数代码为public class Al_deCasteljaupublic function Al_deCasteljau()/ de Casteljau递推算法的实现public function recursion( ctrlPts:Array, k:int , i:int ,t:Number ):Pointif ( k=0 ) return ctrlPtsi;return addPoints(multiplyNumToPoint(1 - t),recur。
3、sion(ctrlPts, k-1, i, t),multiplyNumToPoint(t , recursion(ctrlPts, k-1, i+1, t);public function multiplyNumToPoint(n:Number,p:Point):Pointreturn new Point(p.x * n,p.y * n);public function addPoints(p1:Point,p2:Point):Pointreturn new Point(p1.x + p2.x,p1.y + p2.y);public function minusPoints(p1:Point。
4、,p2:Point):Pointreturn new Point(p1.x - p2.x,p1.y - p2.y);public function algorithm_deCasteljau(t:Number, ctrlPts:Array ):Pointvar size:int = ctrlPts.length;return recursion( ctrlPts, size-1, 0, t );public function upgradePoints(ctrlPts:Array):Arrayvar size:int = ctrlPts.length;var newPts:Array = ne。
5、w Array();newPts0 = ctrlPts0; / i = 0for ( var i:int =1; isize; +i )var factor:Number = i / size;newPtsi = addPoints(multiplyNumToPoint( factor , ctrlPtsi-1 ) , multiplyNumToPoint(1 - factor) , ctrlPtsi);newPtssize = ctrlPtsctrlPts.length-1; / i = n+1return newPts;public function downgradePoints(ctr。
6、lPts:Array):Arrayvar size:int = ctrlPts.length;var newPts:Array = new Array();newPts0 = ctrlPts0; / i = 0for ( var i:int=1; isize-1; +i )var factor:Number = 1.0 /(size-1 - i);newPtsi = multiplyNumToPoint(factor, minusPoints(multiplyNumToPoint(size-1 , ctrlPtsi) , multiplyNumToPoint(i , newPtsi-1);return newPts;编译运行得到如下结果。