`
wgcode
  • 浏览: 593476 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

塞尔曲线德卡斯特里奥(de Casteljau)算法及程序

    博客分类:
  • C++
阅读更多

 

 

 

贝塞尔曲线德卡斯特里奥(de Casteljau)算法及程序

P0P02P2是一条抛物线上顺序三个不同的点。过P0P2点的两切线交于P1点,在P02点的切线交P0P1P2P1P01P11,则如下比例成立:



  

这是所谓抛物线的三切线定理。 


 
P0P2固定,引入参数t令上述比值为t:(1-t),即有:


 
t0变到1,第一、二式就分别表示控制二边形的第一、二条边,它们是两条一次Bezier曲线。将一、二式代入第三式得:
t0变到1时,它表示了由三顶点P0P1P2三点定义的一条二次Bezier曲线。并且表明:这二次Bezier曲线P02可以定义为分别由前两个顶点(P0,P1)和后两个顶点(P1,P2)决定的一次Bezier曲线的线性组合。依次类推,由四个控制点定义的三次Bezier曲线P03可被定义为分别由(P0,P1,P2)和(P1,P2,P3)确定的二条二次Bezier曲线的线性组合,由(n+1)个控制点Pi(i=0,1,...,n)定义的n次Bezier曲线P0n可被定义为分别由前、后n个控制点定义的两条(n-1)次Bezier曲线P0n-1P1n-1的线性组合:

由此得到Bezier曲线的递推计算公式
这就是de Casteljau算法
__________________________________
|下面网址 有关计算机图形学网上教程           |
|  北京大学信息科学学院本科生课程      |
http://graphics.pku.edu.cn/courses/CG/      |
|                                                                     |
|                                                                     |
|  http://www.lnnu.edu.cn/xdjyjx/tuxing/           |
|_________________________________   |

代码如下:

/*************

* pDC                设备

* flArrayx             组成点x坐标序列

* flArrayy             组成点y坐标序列

**************/

int  deCasteljau(CDC *pDC,CArray<float,float>& flArrayx,CArray<float,float>& flArrayy)

{

                 if(flArrayx.GetSize()!=flArrayy.GetSize())

                        return 0;  

                 float *pflX,*pflY;

                 float flTempx,flTempy,flU;//flu-------u参数(和上面t表示意思相同)

                 int i,n,j;  

                 n=flArrayx.GetSize();    

                 if(n<2) return 0;

                 pflX=new float[n];

                 pflY=new float[n];

                 flTempx=flArrayx.GetAt(0);

                 flTempy=flArrayy.GetAt(0);

                 for(i=0;i<n;i++){

                        pflX[i]=flArrayx.GetAt(i);

                        pflY[i]=flArrayy.GetAt(i);

                 }     

                 for(flU=0;flU<=1;flU+=0.05/n){

                        for(i=1;i<n;i++){

                               for(j=0;j<n-i;j++){

                                      pflX[j]=(1-flU)*pflX[j]+flU*pflX[j+1];

                                      pflY[j]=(1-flU)*pflY[j]+flU*pflY[j+1];

                               }

                        }

                        pDC->MoveTo(flTempx,flTempy);

                        pDC->LineTo(pflX[0],pflY[0]);

                        flTempx=pflX[0];

                        flTempy=pflY[0];

                 }

                 delete[] pflX;

                 delete[] pflY;

                 return 1;

}

 

  • 大小: 5.7 KB
  • 大小: 6.8 KB
  • 大小: 6 KB
分享到:
评论

相关推荐

    De Casteljau算法

    德卡斯特里奥(De Casteljau)算法是一种用于计算贝塞尔曲线的数值方法,由比利时工程师保罗·德卡斯特里奥于1956年提出。贝塞尔曲线是计算机图形学中广泛使用的一种参数曲线,常用于设计平滑的路径、动画以及二维和...

    BezierMaker:通过de Casteljau算法重新排列贝塞尔曲线,并计算它的切线,实现1-7级贝塞尔曲线的形成动画

    通过de Casteljau算法放置贝塞尔曲线,并计算它的切线,实现1-7阶贝塞尔曲线的形成动画。想深入了解德卡斯特里奥算法的同学可以参考我的翻译文章 。 产品特点 支持增加和删除控制点 支持1阶到7阶贝塞尔曲线,范围...

    Android代码-BezierMaker

    通过de Casteljau算法绘制贝塞尔曲线,并计算它的切线,实现1-7阶贝塞尔曲线的形成动画。 德卡斯特里奥算法可以计算出Bezier曲线上的一个点,进而绘制出Bezier曲线。想深入了解德卡斯特里奥算法的同学可以参考我翻译...

    计算机图形学-实验六动态绘制Bezier曲线.pdf

    3. 德卡斯特里奥算法(De Casteljau Algorithm): 这是一种用于高效计算Bezier曲线的几何方法,它通过一系列线性插值逐步逼近曲线的最终形状。算法步骤如下: - 从控制点开始,对每一对相邻点执行线性插值,生成...

    Bezier曲线(德卡里特斯奥算法)

    这是一个Bezier曲线反算控制点(德卡里特斯奥算法)使用CArray类作参数传递,能够很容易的使用于自己的源码中;C++类

    德卡T10读卡器测试程序

    本文将详细介绍德卡T10读卡器的测试程序及其相关知识点。 一、读卡器概述 读卡器是连接存储卡与计算机的桥梁,它通过USB接口与电脑相连,让用户能快速访问存储卡内的文件。德卡T10作为一款高性能读卡器,其高速传输...

    android中贝塞尔曲线的应用示例

    最初由保罗·德卡斯特里奥(Paul de Casteljau)于1959年运用德卡斯特里奥演算法开发(de Casteljau Algorithm),在1962,由法国工程师皮埃尔·贝塞尔(Pierre Bézier)所广泛发表。目前广泛应用于图形绘制领域来...

    德卡社保卡T6及P3测试程序.rar

    德卡社保卡T6及P3测试程序是一个专门针对德卡公司生产的社保卡进行功能验证和性能测试的应用软件。这个压缩包包含了多个组件,旨在帮助开发者和测试人员确保德卡社保卡在实际应用中的稳定性和兼容性。以下是该测试...

    图形学实验六《动态绘制bezier曲线》代码+报告

    (2)掌握德卡斯特里奥算法的几何意义 (3)掌握绘制二维Bezier曲线的方法 二、实验步骤 (1)定义deCasteljau(double t,long *p)函数 ①根据控制多边形的点数CtrlPointNum,构造n(CtrlPointNum - 1)个二维函数P[M...

    德卡D3读IC卡WEB测试程序

    德卡D3读IC卡WEB测试程序是一款专为德卡D3读卡器设计的在线测试工具,旨在帮助开发者在WEB环境下便捷地进行IC卡相关的功能验证和应用开发。这款程序充分利用了Web技术,使得用户无需安装特定的桌面应用程序,只需...

    德卡T10 程序环境文件,德卡t10使用说明,Pascal

    德卡T10是一款专为读取特定卡片设计的设备,其程序环境文件包含了与之相关的所有必要组件,便于开发者进行应用开发和接口集成。在本文中,我们将深入探讨德卡T10的使用环境、动态库、DEMO测试以及Pascal编程语言在...

    三次Bezier曲线原理及实现代码

    实际上,Bezier曲线最初是由保罗·德卡斯特里奥(Paul de Casteljau)在1959年提出的,他发明了一种稳定数值方法——德卡斯特里奥算法(de Casteljau's algorithm)来求解这种曲线。 #### 二、Bezier曲线的基本原理 ##...

    德卡D3读卡器测试程序驱动文件

    德卡D3读卡器测试程序驱动文件是一个专为D3读卡器设计的重要软件组件,主要用于确保设备能够正确地与M1类型的智能卡进行通信。M1卡,也称为ISO14443A标准的非接触式IC卡,广泛应用于门禁系统、公共交通支付、电子...

    德卡D6读写器开发包及演示程序

    德卡D6读写器很可能内置了安全机制,如加密算法、数字签名等,以确保数据的安全传输和存储。 8. **非接触式卡支持**:由于支持ISO 14443 A/B和ISO 15693标准,德卡D6读写器可以读写常见的非接触式卡片,如RFID卡、...

    Byangtiao.rar_计算机图形学_计算机图形学程序

    B样条曲线的计算通常基于德卡斯特里奥-贝塞尔公式(De Casteljau's algorithm)或直接矩阵运算。这个程序可能实现了这些算法,允许用户通过指定一系列控制点来生成平滑的曲线。在图形学中,这些曲线可以用于建模复杂...

    德卡T10开发包及demo.rar

    在德卡T10的SDK中,C#可能是用来编写与设备交互的客户端应用程序,包括读取卡片信息、处理交易请求等功能。开发者需要熟悉.NET框架和C#的基础语法,以及如何使用提供的API来操作设备。 2. **JAVA**:JAVA作为一种跨...

    德卡T10 四合一读卡器,C#Demo程序

    德卡这个机器存在很多版本,我开发的这台C#Demo程序,使用的库是DC_Reader.dll这个,由于山东电子健康卡的需要,开发内容中只针对以下卡类型。读卡类型,接触式的诊疗卡,社保卡,身份证,电子健康卡(二维码),...

    recard_德卡D3_读卡器_

    德卡D3是一款专业的读卡器,主要用于读取各种存储卡中的数据,尤其适用于需要频繁进行数据交换的场合。在IT行业中,这种设备扮演着重要角色,为用户提供了一个方便、快捷的方式来访问和管理存储卡上的信息。下面我们...

    Bezier曲线绘制程序的开发

    - Bezier曲线有不同的数学定义方式,如德卡斯特里奥递归算法、波恩斯坦基表示等。其中,波恩斯坦基表示因其易于理解和应用而被广泛采用。 - 波恩斯坦基表示形式:\[ p(t) = \sum_{j=0}^{n} b_j B_{j,n}(t), \; 0 \...

Global site tag (gtag.js) - Google Analytics