双三次Bezier曲面实验报告.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验六 双三次Bezier曲面 一、实验目的 根据Bizer曲面的基础知识和数学基础,对其算法进行程序设计,验证算法的正确性,并通过程序结果加深对常用曲面数学模型的理解。 二、实验任务(2学时) Bezier曲面算法及其程序设计。 实验内容和实验步骤 1、算法描述 Bezier曲面是由Bezier曲线拓广而来,以两组正交的Bezier曲线控制点构造空间网格来生成曲面。m×n次张量积形式的 Bezier曲面的定义如下(参照教材P200式7-20): (u,v)∈〔0,1〕×〔0,1〕 双三次Bezier曲面定义如下(参照教材P201式7-21): (u,v)∈〔0,1〕×〔0,1〕 展开上式,有 代入得到: 令 则有: 生成曲面时可以通过先固定u, 变化v得到一簇Bezier曲线;然后固定v,变化u得到另一簇Bezier曲线,两簇曲线交织生成Bezier曲面。 2、要求: 根据给定的16个控制顶点: P00(200,20,0),P01(150,0,100),P02(50,-130,100),P03(0,-250,50); P10(150,100,100),P11(100,30,100),P12(50,-40,100),P13(0,-110,100); P20(140,280,90),P21(80,110,120),P22(30,30,130),P23(-50,-100,150); P30(150,350,30),P31(50,200,150),P32(0,50,200),P33(-70,0,100); 使用斜等测投影绘制双三次Bizer网格曲面。 3、程序实现步骤:(工程名:BezierCurve2) 步骤1:创建“BezierCurve2”工程文件; 步骤2:创建类class:“ P2”及“P3”;注意:P2 为二维点,含有两个成员变量“x,y”,P3含有三个成员变量“x,y,z”。单击右键-?“new class”-?选择类型“Generic Class”名称为“ P2”及“P3”,添加成员变量(添加至“class EACH_ENTRY { public:”之内): class P2 { public: P2(); virtual ~P2(); double x; double y; }; class P3 { public: P3(); virtual ~P3(); double x; double y; double z; }; 步骤3:包含头文件并定义顶点对象。 1)在“class CBezierCurve2View : public Cview……”之前添加代码“#include P3.h”及“#include P2.h”; #include P3.h//包含三维坐标点类 #include P2.h//包含二维坐标点类 2)在“class CBezierCurve2View : public CView……”内添加代码: P3 P3[4][4];//三维顶点 P2 P2[4][4];//二维顶点 步骤4:添加成员函数。 1)C m n的函数实现,定义成员函数,命名为Multiply_n。方法及过程参照“实验六 曲线及曲面生成算法(一)”; 2)伯恩斯坦多项式Bm,n(t)的函数实现,添加CBezierCurve2View::bernstein。方法及过程参照“实验六 曲线及曲面生成算法(一)”; 步骤5:在OnDraw()中添加代码: 注意:添加头文件 #include math.h//数学头文件 #define Round(d) int(floor(d+0.5))//四舍五入宏定义 上述两行代码添加至:类CBezierCurve2View的所有成员函数代码之前。 1)窗口坐标变换,设置客户区中心为原点 CBezierCurve2Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CRect rect;//定义 客户区矩形 GetClientRect(rect);//获得客户区的大小 pDC-SetMapMode(MM_ANISOTROPIC);//pDC自定义坐标系 pDC-SetWindowExt(rect.Width(),rect.Height());//设置窗口范围 pDC-SetViewportExt(rect.Width(),-rect.Height());//设置视区范围,x轴水平向右,y轴垂直向上 pDC-SetViewportOrg(rec

文档评论(0)

liuxing044 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档