- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 太阳能光伏板安装合同协议.docx VIP
- 智融SW6306V_数据手册.pdf VIP
- 全国第三届职业技能大赛(全媒体运营项目)选拔赛理论考试题库资料(含答案).pdf VIP
- 2018年高职教育专业教学资源库建设方案-深圳职业技术学院评审.docx VIP
- 职业技术学院专业教学资源库建设与管理实施办法(试行).docx VIP
- 教育部中小学德育工作指南.pptx VIP
- 2025年成人高考时事政治试卷及答案.docx VIP
- 《工程渣土资源化利用技术规程》DB32T 5172-2025(江苏省标).pdf VIP
- 建筑结构抗震设计第三章振型分解反应谱法.ppt VIP
- 《走近周杰伦》课件.ppt VIP
文档评论(0)