社区
下载资源悬赏专区
帖子详情
Bezier曲线构造算法下载
weixin_39821260
2019-08-01 11:30:27
Bezier曲线的构造方法 很简单 一看就懂
相关下载链接:
//download.csdn.net/download/liangguangqiang/4155806?utm_source=bbsseo
...全文
5
回复
打赏
收藏
Bezier曲线构造算法下载
Bezier曲线的构造方法 很简单 一看就懂 相关下载链接://download.csdn.net/download/liangguangqiang/4155806?utm_source=bbsseo
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Bezier
曲线
构造
算法
Bezier
曲线
的
构造
方法 很简单 一看就懂
Bezier
曲线
类的
构造
C+ +
Bezier
曲线
类的
构造
X 中图法分类号: TP302. 4
Bezier
曲线
作为一种特殊的参数多项式
曲线
, 一经问世, 就曾受到CAGD 学术界的广泛重 视. 尽管如今在CAD 领域有许多种不同的自由型
曲线
和曲面的
构造
方法, 但使用
Bezier
曲线
仍不失为一种重要的备选方案. 例如国内外多种矢量字库的构建, 仍然广泛使用
Bezier
曲线
技 术.
Bezier
曲线
的实现方法传统上主要求助于de Casteljau
算法
. 但随着计算机硬件技术的不 断进步, 计算机的处理速度越来越快,
算法
的高效尽管仍很重要, 但代码的易于维护性和可重 用性即显得日见重要. 本文利用C+ + 面向对象的特性, 将
Bezier
曲线
的定义和生成建立在矩 阵运算类的基础上, 从而使描述和生成
Bezier
曲线
的代码变得简单明了, 且有着很好的可扩展 性. 1
Bezier
曲线
的矩阵表示 记B n= [ Bn0 ( t ) , Bnn ( t ) ] , 其中B n i ( t ) = Ci nt i ( 1- t ) n- i , t I [ 0, 1] . Tn = [ 1 t , t n ] , Vn= b0 b 1 s bn 1 , Mn = m00 m01 , m0n m10 m11 , m1n , , , , mn 0 mn1 , mnn 其中mij = ( - 1) ij * Ci n * Cj i , 且当j > i 时, mij = 0, 则以b0, b 1, ,, bn 为控制顶点的
Bezier
曲线
可以表为P( t ) = Tn * Mn * Vn . 2 几个通用模板的定义 为了能够方便地使用计算机来处理上述简便的
Bezier
矩阵表达式, 从而大大简化计算机 图形软件的开发, 显然我们首先必须能够方便地使用计算机来处理矩阵和向量等对象, 为此目 的我们利用C+ + 中的最新特征引入了如下向量模板和矩阵模板的概念. 第21 卷 第2 期 江西师范大学学报( 自然科学版) Vol. 21 No. 2 1997 年5 月 JOURNAL OF JIANGXI NORMAL UNIVERSITY May 1997 X 收稿日期: 1997- 01- 20 2. 1 向量模板的定义 template 3class T4 class VectorTemplate { private: int numElement s; T * element s; protected: public: VectorTemplate( void) ; VectorTemlate( int) ; VectorTemplate( VectorTemplate3T4 &vSrc;) ; -VectorTemplate( void) ; T & operator[ ] ( unsigned int index ) { return elements [ index] ; } ; int size( void) { return numElement s; } ; void resize ( int sizeIn) ; VectorTemplate3T4& operator= ( VectorTemplate3T4 & ) ; VectorTemplate3T4& operator= ( T) ; float leng th( void) ; VectorTemplate3T4 &normalize;( void) ; friend T operator * ( VectorTemplate3T4 & v1, VectorT emplate3T4 & v2) ; friend VectorTemplate 3T 4 operator + ( VectorTemplate3T 4 & v1, VectorTemplate3T 4 &v 2) ; friend VectorTemplate3T4 operator-( VectorT emplate3T4 & v1, VectorTemplate3T4 & v2) ; friend VectorTemplate3T4 operator * ( VectorTemplate3T4 & v1, T scalar) ; friend VectorTemplate3T4 operator * ( T scalar, VectorTemplate3T4 & v1) ; VectorTemplate3T4 & operator+ = ( vectorTemplate3T4 & v) ; VectorTemplate3T4 & operator * = ( T scalar) ; VectorTemplate3T4 & operator- = ( VectorTemplate3T4 & v) ; VectorTemplae3T4 cross( VectorT emplate3T4 & v) ; } 在向量模板的定义中, 通过运算符的重载, 使我们能像对待普通的数学运算一样来引述两 个向量或向量与标量之间的四则运算. 例如: 对于两个向量V1、V2 的内积, 只须简单地表示为 V1* V2, 而对于一个标量s 与向量V1 的乘积亦只须记着s* V1, 而丝毫不会引起混淆. 2. 2 矩阵模板的定义 template 3class T4 class Mat rixTemplate { private: int numRow s; int numColumns; 1 28 江西师范大学学报( 自然科学版) 1997 年 VectorTemplate3T4 * element s; Void create( int , int ) ; protected: public: Mat rixTemplate( void) { numRow s= 0; numColumns= 0; elements= NULL; } ; Mat rixTemplate( int size) { create( size, size) ; } ; Mat rixTemplate( int, int ) ; Mat rixTemplate( Mat rixTemplate3T4 & mSrc) ; -Mat rixT emplate( void) ; VectorTemplate3T4& operator[ ] ( int row ) { return elements[ row ] ; } ; int nrows( void) { return numRows; } ; int ncols( void) { return numColumns; } ; void resize( int new-ncols, int new-nrows) ; friend Mat rixT emplate3T4 operator * ( Mat rixTemplate3T4 & , Mat rixTemplate3T4 & ) ; friend VectorTemplate3T4 operator * ( MatrixTemplate3T4 & , VectorTemplate3T4 & ) ; Mat rixTemplate3T4& operator * = ( Mat rixTemplate3T4 & m) { * this= m * ( * this) ; return * this; } ; Mat rixTemplate3T4& operator= ( MatrixT emplate3T4 & ) ; float determinant ( void) ; Mat rixTemplate3T4& t ranslate( VectorTemplate3T4 & ) ; Mat rixTemplate3T4& scale( VectorTemplate3T4 & ) ; Mat rixTemplate3T4& t ranslate( float , float ) ; Mat rixTemplate3T4& scale( f loat, f loat) ; Mat rixTemplate3T4& rotate( f loat ) ; Mat rixTemplate3T4& t ranslate( float , float , f loat) ; Mat rixTemplate3T4& scale( f loat, f loat, float) ; Mat rixTemplate3T4& rotate( f loat , f loat, f loat) ; Mat rixTemplate3T4& setIdent ity( void) ; Mat rixTemplate3T4& ident ity( void) { return set Identity( ) ; } ; } ; typedef Mat rixTemplate3f loat4 Matrix; 在矩阵模板中, 我们不但定义了各种常用的运算, 而且还封装了平移、缩放、旋转等成员函 数, 这一切都是为了使图象的生成和处理变得更简便些. 但仅有这两个类当然还不够. 我们的 目的是要生成
Bezier
曲线
, 然而我们知道, 在计算机表示中
曲线
是由折线来逼近的, 而折线又 是由线段组成的. 此外, 两点决定一条线段. 因此, 为了一般的表示一条
Bezier
曲线
, 我们需要 先对点、线段和折线有一个统一的描述, 同时, 这也是为了符合GKS-3D 图形标准. 第2 期 陈国华 C+ +
Bezier
曲线
类的
构造
12 9 点的功能无非是用来确定空间的一个坐标, 所以我们不难从向量类中来派生一个点类, 如: ( 1) 点类 Class SplinePoint: public Vector{ public ,, void setCoord( Vector & v) ; void getCoord( Vector & v) ; ,, } 有了点类之定义, 我们可以把折线看成是由一系列顶点控制确定的, 但为了使这一系列顶 点的排列有一定的顺序, 并且便于索引访问, 我们又不得不增加一个简单的线性表类来对之加 以管理. ( 2) 简单表类 template 3class T4 class SimpleTable{ private: int curSize; T * * items; ,, public: ,, T & operator[ ] ( int ) ; ,, } ( 3) 折线类 class SplinePolyline{ protected: SimpleT able3SplinePoint4 point s; public: SplinePolyline( void) ; SplinePolyline( int np) ; SplinePoint & operator[ ] ( unsigned int index) ; void draw ( ) ; } 3
Bezier
曲线
类的
构造
如上所述, 计算机所表示的
曲线
实际上只是一条折线,
Bezier
曲线
也不例外, 只不过根据 用户的精度要求不同增加插值点的个数有所不同而已. 据此, 我们不难从折线类来派生我们所 1 30 江西师范大学学报( 自然科学版) 1997 年 要求的
Bezier
曲线
类. class BezCurve: public SplinePolyline { private: int smooth; public: BezCurve( void) { } ; BezCurve( int numPoint In) : SplinePolyline( numPoint In+ 1) { smooth= 5; } void set smooth( int s In) { smooth= s In; } int getsmooth( void) { return smooth; } void draw( void) ; void draw( class SplinePerspective& ) ; } 在上述
构造
中, 我们缺省地取光滑度smooth= 5, 即在每两个顶点之间加5 个插值点, 其 中令人感兴趣的当然是draw ( ) 例程, 缺省情况下按2 维的要求来绘制
Bezier
曲线
, 如果给出 适当的透视参数( 由class Spline Perspective 定义) , 则可按透视要求来绘制
Bezier
曲线
. 4 应用 在以往的基于C 或Pascal 等语言的
Bezier
曲线
的生成过程中, 往往是一面定义一条Bez-i er
曲线
, 然后调用一外部过程来绘制它, 因此涉及复杂的参数传递等问题, 而在此处, 每一条
Bezier
曲线
都被定义为知道如何绘制自己了. 因此, 要定义一条
Bezier
曲线
并实际地画出它, 只须简单地遵循以下几步即可. 第一步: 定义一条
Bezier
曲线
BezCurve bezcurve( n) ; 如果欲使该
曲线
更光滑, 则可进一步设置其光滑度 bezcurve. set smooth( sIn) ; 第二步: 设定n 个顶点的坐标 bezcurve. setCoord( x , y ) 或bezcurve. setCoord( x , y , z ) ; 或bezcurve. setCoord( vec) ; 第三步: 绘制
曲线
bezcurve. draw( ) ; 或对空间
曲线
bezcurve. draw ( proj) ; 即可完成整条
曲线
的定义和绘制过程. 第2 期 陈国华 C+ +
Bezier
曲线
类的
构造
13 1 参 考 文 献 1 Marc Berger. Computer g raphics wit h Pascal. T he Benjamin/ Cummings Pub Inc, 1986. 1~ 340 2 易忠亮. C+ + 矩阵运算类与Windows 应用软件. 北京: 清华大学出版社, 1995. 1~ 380 3 罗振东, 廖光裕. 计算机图示学原理和方法. 上海: 复旦大学出版社, 1993. 120~ 140 4 蔡士杰等. 三维图形系统PHIGS 的原理与技术. 南京: 南京大学出版社, 1993. 62~ 89 5 施法中. 计算机辅助几何设计与非均匀有理B 样条. 北京: 北京航空航天大学出版社, 1994. 121~ 173 The Construction of C+ +
Bezier
Curve Class Chen Guohua ( Department of Comput er Science, Guangdong Inst itut e for Nat ionalities, Guangzhou 510633) Abstract: In this paper, we have used the C+ + OOP feature to encapsulate the procedure of both defining and draw ing of a
Bezier
curve, so greatly simplifed the programming of draw ing a
Bezier
curve. Key words: OOP, class, template,
Bezier
curve ( 上接第120 页) 参 考 文 献 1 刘余善. 实用管理系统工程. 杭州: 浙江人民出版社, 1983. 266~ 268 2 魏国华, 傅家良, 周仲良. 实用运筹学. 上海: 复旦大学出版社, 1987. 363~ 365 3 王俊峰. 确定有批量价格折扣问题的经济订购批量的最大利润法. 系统工程理论与实践, 1996, ( 5) : 60 ~ 63 EOQModels Concerning the Questions of Permissible Shortage and Quantity Discount Wan Baozhen ( Commercial College of Jiangxi Normal University, Nanchang 330027) Abstract: With a study of the improvement on the broadening of sphere of applicat ion and the re-establishment of cost project, the paper presents a new SDEOQ model that is more suitable to the pract ices in the area of product ion and circulat ion under the condit ions of socialist market economy and a discussion about the opt imality of SDEOQ model w ith both it s part ial and whole opt imal solut ions being achieved. Key words: economic order quant ity( EOQ) , permissble shortage, quant ity discount , opt imal-i ty
有理q-Bernstein-
Bezier
曲线
的
构造
及其应用 (2010年)
有理Bernstein-
Bezier
曲线
在计算机辅助设计和计算机图形学上具有广泛的应用。在研究了经典的 Bernstein-
Bezier
曲线
及de Casteljau
算法
的基础上,结合q-Bernstein多项式,给出了有理q-Bernstein-
Bezier
曲线
的
构造
方法、性质和计算有理
曲线
的de Casteljau
算法
,并讨论了
曲线
的细分和升阶的方法,通过改变q的取值,可以获得有理
曲线
族,在
曲线
造型上具有较强的灵活性。最后通过表示圆锥
曲线
和数字图像插值证明有理q-Bernstein-
Bezier
曲线
的
图形学实验六《动态绘制
bezier
曲线
》代码+报告
一、实验目的 (1)掌握直线的参数表示法 (2)掌握德卡斯特里奥
算法
的几何意义 (3)掌握绘制二维
Bezier
曲线
的方法 二、实验步骤 (1)定义deCasteljau(double t,long *p)函数 ①根据控制多边形的点数CtrlPointNum,
构造
n(CtrlPointNum - 1)个二维函数P[M][M] ②利用p[i]赋值P[0][i] ③利用函数P[r][i] = (1 - t) * P[r - 1][i] + t * P[r - 1][i + 1],返回P[n][0]值。 (2)定义void CTestView::Draw
Bezier
()函数 ①利用px[i], py[i]分别储存P[i].x、P[i].y. ②利用deCasteljau(double t,long *p)函数得出p的x、y值 ③利用pDC->SetPixel(p.x, p.y, RGB(0, 0, 255))画图
计算机图形学若干基本
算法
的实现研究
本文所研究的计算机图形学若干基本
算法
,包括:裁剪
算法
、多边形 布尔运算、
曲线
边多边形分割
算法
、
曲线
边多边形面积
算法
、高维空间距 离
算法
和主成分回归分析法(PCR),具体工作如下: 平面多边形的各种分解表示方法在计算机几何造型领域中有着广泛 的应用,根据基于三角形的多边形表示方法,通过研究
构造
的多种
算法
和 它的一些应用,在原有工作的基础上,对
算法
进行了扩展,针对在
构造
有
曲线
边多边形分层表示时可能会出现不合理情形,对
曲线
边进行分割,提 出了一些可以利用的分割
算法
,包括对圆锥
曲线
边求分割点和切点的算 法,对三次
Bezier
曲线
边求可能的自交点的
算法
,对三次
Bezier
曲线
边 求不同形式分割点和切点的
算法
。 复杂几何形状面积的计算,属于计算几何方面的问题。在实际应用中, 不但经常需要计算一般多边形的面积,而且有时还需要计算有
曲线
边多边 形的面积。为简便和考虑实用需要,可以假定
曲线
边是圆锥
曲线
边或三次
Bezier
曲线
边。本文对圆锥
曲线
边和三次
Bezier
曲线
边两种
曲线
边多边 形的面积
算法
分别进行讨论。 由对象多个特征组成的特征向量,可以自然地看作是高维数据空间中 的一点。许多实际问题涉及到高维数据点。在高维空间中点的超球范围查 找问题是:已知一个高维数据点集,输入一个点和半径数值,询问所确定 超球范围内包含有给出点集中哪些点。考查了用计算街区和棋盘距离的线 性组合来代替计算欧氏距离的方法,这个方法由于减少了乘法计算而明显 的可以提高效率。 还有,本文结合贝叶斯网络提出一种新的回归树学习
算法
─ BRT(Bayesian Regression Tree)。在BRT多元回归模型中,需要有变量 选择的功能,利用主成分回归分析法(PCR),在通过正交旋转变换来消除原 始数据中的相关性或冗余度的基础上,根据方差贡献率选择特征属性,实维属性空间向低维属性空间的映射。
下载资源悬赏专区
12,800
社区成员
12,339,709
社区内容
发帖
与我相关
我的任务
下载资源悬赏专区
CSDN 下载资源悬赏专区
复制链接
扫一扫
分享
社区描述
CSDN 下载资源悬赏专区
其他
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章