贵州大学实验报告
学院:计算机科学与信息学院 专业:计算机科学与技术 班级: 101
姓名 | 学号 | 实验组 | 5 | |||
实验时间 | 2013.5.2 | 指导教师 | 吴云 | 成绩 | ||
实验项目名称 | 常用曲面与曲线的生成算法 | |||||
实验目的 | 1、通过实验,进一步理解和掌握生成Hermit、Bezier和B样条曲线及Bezier曲面的生成算法 2、掌握Hermit、Bezier、B样条曲线及Bezier曲面的基本生成过程 3、通过编程,会在一种语言环境下编程实现三次Hermit、Bezier、B样条曲线及Bezier曲面的绘制 | |||||
实验要求 | 1、编程实现Hermit曲线的绘制。 2、编程实现B样条曲线的绘制。 3、编程实现Bezier曲线的绘制。 4、编程实现Bezier曲面的绘制。 | |||||
实验原理 | 1. 3次Hermite样条曲线 (1). 将参数样条曲线中的参数区间进行 等距参数化,即令Li长度归一化为1。就得到Hermite曲线。 (2). 用其端点位矢Pi(0)、Pi(1)和切矢Pi’(0)和Pi’(1)描述。 记为:G=A•M 求解得:A=G • MH 令: 可将其简记为: 上式是三次Hermite(Ferguson)曲线的几何形式。 几何系数是P0、P1、P’0、P’1。 F0,F1, G0,G1称为基函数/调和函数。 (3). 每一段Hermite曲线就是控制点P0、P1、P’0、P’1的加权和,权值由基函数F0,F1, G0,G1确定。通过增加顶点并指定相应的切矢,就可得到分段Hermite样条曲线。 2、Bezier曲线 (1)基本构型原理是: a.两点P0、P1确定一条直线,表示为一次参数方程:p=p0+(p1-p0)t b.三点确定一条二次曲线:p=(1-t)2p0+2t(1-t)p1+t2p2, c.三个点p0,p1,p2称作顶点,中间顶点p1不但控制曲线的首末端切矢(方向和大小),而且唯一确定曲线的形状。 d.以此类推,n+1个顶点唯一确定一条n次曲线。顶点P0,P1,…,Pn的第一条边P0P1决定曲线的一阶导矢,第1,2条边决定曲线的二阶导矢,第1,2,3条边决定曲线的三阶导矢. (2).曲线方程中,各顶点的系数与二项式(1-t)n的展开式相似,在函数逼近论中,称这种系数函数为Bernstein基函数。 (3). 给定空间n+1个点的位置矢量Pi(i=0,1,2,…,n) 则Bézier曲线可定义为: 其中,Pi构成该Bézier曲线的特征多边形,Bi,n(t)是n次Bernstein基函数: (4). 3次Bézier曲线 3.B样条曲线 (1). 在Bézier曲线方程中,用B样条基函数代替Bernstein基函数,就得到B样条曲线。 (2). B样条曲线的突出优点是对曲线的局部修改功能,因为B样条曲线是分段组成的(很容易产生C2连续性),所以控制多边形的顶点对曲线的控制灵活而直观。 (3). B样条曲线的次数可根据需要指定,不像Bezier曲线的次数是由控制点的个数来确定。 (4). B样条曲线的方程定义为: 给定空间n+1个点Pi(i=0,1,2,…,n),及参数节点向量:T={ti}(ti≤ti+1 ,i=0,1,2,…,m),由下式定义的曲线P(t) 称为k阶 (k-1次)B样条曲线: 阶数k,控制顶点数n+1,节点个数m+1,具有以下关系: m=n+k 记T为:Tn,k={ti}(ti≤ti+1 ,i=0,1,2,…,n,…,n+k) (4)Bezier曲面 (1). 给定空间16个位置点rij,可以确定一张三次Bézier曲面片: (2). 首先生成四条v向的三次Bézier曲线: (3). 根据“线动成面”的思想,取v*∈[0,1],在四条v线上取点为控制点,沿u向生成三次Bézier曲线: (4). 将u,v向曲线方程合并得 (5). 3次Bézier曲面的矩阵表达式: | |||||
实验环境 | Microsoft Visual Studio 6.0 | |||||
实验步骤 | 一.绘制Hermit曲线: 1. 创建一个MFC工程,取名为zjie_ex05: 2、在CZjie_ex05View.h文件中声明成员函数和变量: 3.在CZjie_ex05View.cpp文件中,头文件加入# define ROUND(a) int(a+0.5),#include "math.h"数学头文件,写入控制多边形的初始化和绘制函数的代码并对写入成员函数的函数体,具体代码在此省略 。 4.设计Menu 在资源视图Resource View上双击Menu,打开IDR_MAINFRAME,设计如下: 并在CZjie_ex05View.cpp中参加菜单函数,具体函数代码在此省略。 5.运行调试 二、绘制B样条曲线: 1. 创建一个MFC工程,取名为zjie_B: 2、在zjie_BView.h文件中声明成员函数和变量: 3.在在zjie_BView.h文件中,头文件加入# define ROUND(a) int(a+0.5),写入控制多边形的初始化和绘制函数的代码并对写入成员函数的函数体,具体代码在此省略 。 4.设计Menu 在资源视图Resource View上双击Menu,打开IDR_MAINFRAME,设计如下: 并在在zjie_BView.cpp中参加菜单函数,具体函数代码在此省略。 5.运行调试 三.绘制Bezier曲线: 1. 创建一个MFC工程,取名为zjie_bezier: 2、在zjie_bezierView.h文件中声明成员函数和变量: 3.在zjie_bezierView.h文件中,头文件加入以下头文件: 写入控制多边形的初始化和绘制函数的代码并对写入成员函数的函数体,具体代码在此省略 。 4.设计Menu 在资源视图Resource View上双击Menu,打开IDR_MAINFRAME,设计如下: 并在在zjie_bezierView.cpp中参加菜单函数,具体函数代码在此省略。 5.运行调试 四.Bezier曲面的绘制: 1. 创建一个MFC工程,取名为zjie_Bezier_qm: 2.建立两个新类,分别为P3D,P2D用于设置三维坐标点和二维坐标点: 3.在zjie_Bezier_qmView.h文件中,头文件加入以下头文件: 写入成员函数和变量的声明的函数体,具体代码在此省略 。 4.在zjie_Bezier_qmView.cpp文件中,头文件加入以下头文件: 写入成员函数的函数体,具体代码在此省略 。 4.设计Menu 在资源视图Resource View上双击Menu,打开IDR_MAINFRAME,设计如下: 并在在zjie_Bezier_qmView.cpp中参加菜单函数,具体函数代码在此省略。 5.运行调试 | |||||
实验内容 | 编写绘制Hermit、Bezier、B样条曲线的程序。 | |||||
实验结果 | 一. Hermit曲线: 可执行程序运行初界面: 点击绘图的里绘制Hermit曲线: 二. 绘制三次B样条曲线: 1.可执行程序运行初界面: hermit2.点击绘制三次B样条曲线: 3.直接拖动多边形顶点: 三. 绘制Bezier曲线: 1.点击绘制Bezier曲线: 2.点击鼠标左键,设置控制多边形顶点,并点击右键得到曲线: 一次Bezier曲线: 、 二次Bezier曲线: 三次Bezier曲线: 四次Bezier曲线: 四.绘制Bezier曲面: 运行程序界面: 点击绘制曲面: 点击绘制特征多边形: | |||||
实验总结 | 通过此次实验使我深刻理解B样条曲线,Hermit曲线,Bezier曲线与曲面的生成算法与原理,弥补了在课堂上一些不懂的地方,通过上次编程了解曲线去曲面的绘制中的一些基本要素,提高自己的动手能力。 | |||||
指导教师意见 | 签名: 年 月 日 | |||||
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论