欢迎来到天天文库
浏览记录
ID:58869074
大小:600.50 KB
页数:39页
时间:2020-09-21
《自由曲线和曲面的绘制.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、...信息与计算科学专业基础课ComputerGraphicsReportOfcourseexperiment计算机图形学课程实验报告实验题目自由曲线和曲面的绘制班级计算091姓名阳学号3090811019指导教师胡钢日期2012-6-17理工大学理学院应用数学系二0一二年春季学期.......实验4自由曲线和曲面的绘制@实验说明实验目的:掌握自由曲线和曲面(包括Bezier曲线、曲面和B样条曲线、曲面)的生成算法思想,并能上机编程绘制相应的曲线、曲面和利用曲线、曲面进行简单的几何造型设计。实验地点:教九楼401数学系机房实验要求(Direction):1.每个
2、学生单独完成;2.开发语言为TurboC或C++,也可使用其它语言;3.请在自己的实验报告上写明、学号、班级;4.每次交的实验报告容包括:题目、试验目的和意义、程序制作步骤、主程序、运行结果图以及参考文件;5.自己保留一份可执行程序,考试前统一检查和上交。@实验容:实验题一1.1实验题目上机编写一个能绘制Bezier曲线和B样条曲线的通用程序,并调试成功。具体要求为:(1)用户在运行程序时,可以根据提示信息来决定选择绘制Bezier曲线,还是B样条曲线;(2)两种曲线控制顶点的个数和坐标值要求可以随机输入(即Bezier曲线和B样条曲线的次数和位置可以随机输入)
3、;(3)当用户输入控制点的坐标位置后,屏幕上生成曲线的同时显示其特征多边形;且在特征多边形的顶点处输出该顶点坐标;(4)要求在可执行程序后附上运行结果(两种曲线都至少附上一个结果图)。1.2实验目的和意义掌握Bezier曲线和B样条曲线的绘制方法。1.3程序制作步骤(包括算法的基本思想、流程图、设计步骤等)一、基本思想(1)Bezier曲线:是由一组折线来定义的,且第一个点和最后一个点在曲线上,第一条和最后一条折线分别表示出曲线在起点和终点处的切线方向。Bezier曲线通常由(n+1)个顶点定义一个n次多项式。.......(2)B样条曲线:B样条曲线段是由若干
4、条曲线段光滑连接而成的。首先定义B样条曲线段。设给定n+1个型值点,用表示(i=0,1,2,…,n)。把n次参数曲线段:叫做B样条曲线段。与Bezier曲线类似,依次用线段连接中相邻两个型值点所得的折现多边形称为B特征多边形。二、设计步骤Step1:选择Bezier或B样条曲线绘图;Step2:若选择用Bezier曲线绘图,输入控制顶点个数,依次输入控制顶点坐标;若选择用B样条曲线绘图,输入B样条曲线段次数,输入控制顶点个数,依次输入控制顶点坐标;Step3:则将t[0,1]区间剖分成m等分,对于每一个ti,i=0,1,…,m,根据式(1)或(2)都可以计算出一
5、个P(ti),计算所有的P(ti)。Step4:依次连接每个P(ti),就得到Bezier或B样条曲线1.4主程序#include#include#include#include#include"graphics.h"//usingnamespacestd;#definepi3.1415926/**************二维点类**********************/classPoint{public:.......doublex;doubley;Point(intx=0,in
6、ty=0)//构造函数{this->x=x;this->y=y;}voidoperator=(Point&a)//重载=运算符{x=a.x;y=a.y;}Pointoperator*(doublea)//重载*运算符{returnPoint(a*x,a*y);}Pointoperator+(Pointa)//重载+运算符{returnPoint(x+a.x,y+a.y);}voidoperator+=(Pointa)//重载+=运算符{.......x+=a.x;y+=a.y;}}/*********************基本的函数**************
7、************///求阶乘longintFactorial(intn){inti,sum=1;if(n==0)return1;for(i=2;i<=n;i++)sum*=i;returnsum;}//求Bernstein基函数doubleBernstein(inti,intn,doublet){return(double)Factorial(n)/Factorial(i)/Factorial(n-i)*pow(t,i)*pow(1-t,n-i);}.......//求B_SplineBase基函数doubleB_SplineBase(inti,intn
8、,doublet){do
此文档下载收益归作者所有