精华内容
下载资源
问答
  • B样条曲线原理

    2014-02-24 16:02:02
    B样条曲线几何原理演示,里面有源代码,是c++的,欢迎下载
  • B样条曲线拟合原理

    万次阅读 多人点赞 2017-01-13 18:51:43
    B样条曲线是在Bezier 曲线基础上发展起来的一类曲线,它克服了Bezier 曲线整体控制性所带来的不便,最常用的是二次和三次B样条曲线。 2.二次B样条 2.1 参数方程 已知三个平面离散点P0、P1、P2,由这三点可以定义...
    展开全文
  • B样条曲线生成原理及实现

    热门讨论 2011-11-03 08:55:20
    分布情况把B样条曲线划分成均匀B样条曲线、准均匀B样条曲线、分段贝齐尔曲线、一般非均匀B样条曲线4种 类型,分别对它们的特点和实现方法进行了详细阐述,最后给出了一个完整的各种B样条曲线生成代码和运行结 果
  • 三次B样条曲线拟合算法

    万次阅读 多人点赞 2017-01-17 22:10:28
    三次B样条曲线方程B样条曲线分为近似拟合和插值拟合,所谓近似拟合就是不过特征点,而插值拟合就是通过特征点,但是插值拟合需要经过反算得到控制点再拟合出过特征点的B样条曲线方程。这里会一次介绍两种拟合算法。...

    1 三次B样条曲线方程

    B样条曲线分为近似拟合和插值拟合,所谓近似拟合就是不过特征点,而插值拟合就是通过特征点,但是插值拟合需要经过反算得到控制点再拟合出过特征点的B样条曲线方程。这里会一次介绍两种拟合算法。首先介绍B样条的曲线方程。
    B样条曲线的总方程为: P ( t ) = ∑ i = 0 n P i F i , k ( t ) P(t)=\sum_{i=0}^{n} P_{i}F_{i,k}(t) P(t)=i=0nPiFi,k(t) (1)
    其中 P i P_i Pi是控制曲线的特征点, F i , k ( u ) F_{i,k}(u) Fi,k(u)则是K阶B样条基函数。
    1.1 三次B样条曲线方程中基函数为:
    F i , k ( t ) = 1 k ! ∑ m = 0 k − i ( − 1 ) m ( m k + 1 ) ( t + k − m − j ) k F_{i,k}(t)=\frac{1}{k!}\sum_{m=0}^{k-i}(-1)^{m}\binom{m}{k+1}(t+k-m-j)^k Fi,k(t)=k!1m=0ki(1)m(k+1m)(t+kmj)k (2)
    其中 ( m k + 1 ) \binom{m}{k+1} (k+1m)表示阶乘,化成看的明白的式子就是:

    这里写图片描述
    将图片上的基函数代入到方程(1)中,就是:
    P ( t ) = P 0 ∗ F 0 , 3 ( t ) + P 1 ∗ F 1 , 3 ( t ) + P 2 ∗ F 2 , 3 ( t ) + P 3 ∗ F 3 , 3 ( t ) P(t)= P_0*F_{0,3}(t)+P_1*F_{1,3}(t)+P_2*F_{2,3}(t)+P_3*F_{3,3}(t) P(t)=P0F0,3(t)+P1F1,3(t)+P2F2,3(t)+P3F3,3(t) (3)
    方程(3)就是三次B样条曲线方程。


    2019-04-18 更新

    有小伙伴提到上式(2)的j是什么意思,其实j就是控制点的索引值。这里我把书上的公式摘抄下来,可能看起来更为清晰。
    参考书籍:《计算机图形学 第3版》何援军 第13章
    三次B样条曲线计算
    F 0 , 3 ( t ) = 1 3 ! ∑ j = 0 3 ( − 1 ) j C 4 j ) ( t + 3 − 0 − j ) 3 F_{0,3}(t)=\frac{1}{3!}\sum_{j=0}^{3}(-1)^{j}C^{j}_{4})(t+3-0-j)^3 F0,3(t)=3!1j=03(1)jC4j)(t+30j)3

    = 1 6 [ ( − 1 ) 0 C 4 0 ( t + 3 ) 3 + ( − 1 ) 1 C 4 1 ( t + 2 ) 3 + ( − 1 ) 2 C 4 2 ( t + 1 ) 3 + ( − 1 ) 3 C 4 3 t 3 ] =\frac{1}{6}[(-1)^{0}C^{0}_{4}(t+3)^{3}+(-1)^{1}C^{1}_{4}(t+2)^{3}+(-1)^{2} C^{2}_{4}(t+1)^{3}+(-1)^{3}C^{3}_{4}t^{3}] =61[(1)0C40(t+3)3+(1)1C41(t+2)3+(1)2C42(t+1)3+(1)3C43t3]

    = 1 6 ( − t 3 + 3 t 2 − 3 t + 1 ) = 1 6 ( 1 − t ) 3 =\frac{1}{6}(-t^{3}+3t^{2}-3t+1)=\frac{1}{6}(1-t)^{3} =61(t3+3t23t+1)=61(1t)3

    F 1 , 3 ( t ) = 1 3 ! ∑ j = 0 2 ( − 1 ) j C 4 j ) ( t + 3 − 1 − j ) 3 F_{1,3}(t)=\frac{1}{3!}\sum_{j=0}^{2}(-1)^{j}C^{j}_{4})(t+3-1-j)^3 F1,3(t)=3!1j=02(1)jC4j)(t+31j)3

    = 1 6 [ ( − 1 ) 0 C 4 0 ( t + 2 ) 3 + ( − 1 ) 1 C 4 1 ( t + 1 ) 3 + ( − 1 ) 2 C 4 2 t 3 ] =\frac{1}{6}[(-1)^{0}C^{0}_{4}(t+2)^{3}+(-1)^{1}C^{1}_{4}(t+1)^{3}+(-1)^{2} C^{2}_{4}t^{3}] =61[(1)0C40(t+2)3+(1)1C41(t+1)3+(1)2C42t3]

    = 1 6 ( 3 t 3 − 6 t 2 + 4 ) =\frac{1}{6}(3t^{3}-6t^{2}+4) =61(3t36t2+4)

    F 2 , 3 ( t ) = 1 3 ! ∑ j = 0 1 ( − 1 ) j C 4 j ) ( t + 3 − 2 − j ) 3 F_{2,3}(t)=\frac{1}{3!}\sum_{j=0}^{1}(-1)^{j}C^{j}_{4})(t+3-2-j)^3 F2,3(t)=3!1j=01(1)jC4j)(t+32j)3

    = 1 6 [ ( − 1 ) 0 C 4 0 ( t + 1 ) 3 + ( − 1 ) 1 C 4 1 t 3 =\frac{1}{6}[(-1)^{0}C^{0}_{4}(t+1)^{3}+(-1)^{1}C^{1}_{4}t^{3} =61[(1)0C40(t+1)3+(1)1C41t3

    = 1 6 ( − 3 t 3 + 3 t 2 + 3 t + 1 ) =\frac{1}{6}(-3t^{3}+3t^{2}+3t+1) =61(3t3+3t2+3t+1)

    F 3 , 3 ( t ) = 1 3 ! ∑ j = 0 0 ( − 1 ) j C 4 j ) ( t + 3 − 3 − j ) 3 F_{3,3}(t)=\frac{1}{3!}\sum_{j=0}^{0}(-1)^{j}C^{j}_{4})(t+3-3-j)^3 F3,3(t)=3!1j=00(1)jC4j)(t+33j)3

    = 1 6 [ ( − 1 ) 0 C 4 0 t 3 =\frac{1}{6}[(-1)^{0}C^{0}_{4}t^{3} =61[(1)0C40t3

    = 1 6 t 3 =\frac{1}{6}t^{3} =61t3


    2 三次B样条曲线近似拟合

    近似拟合很简单。不需要求控制点,求得 F i , k ( t ) F_{i,k}(t) Fi,k(t),由上述方程(3),代入 P 0 , P 1 , P 2 , P 3 P_0,P_1,P_2,P_3 P0,P1,P2,P3就可以得到由这四个点近似拟合的一段三次B样条曲线,起始点在 P 0 P_0 P0,终点在 P 1 P_1 P1,对于闭合轮廓,最后一段可以取前两点做辅助,拟合实验结果我最后一块给出。这种近似拟合曲线光滑,但是最大不足就是不过特征点,也就是不过 P i P_i Pi,需要过点需要反求控制点再拟合。

    3 三次B样条插值拟合

    插值拟合较为复杂。其实也不算是很复杂,找资料过程和理解过程是一个复杂的过程。不过有了前面大神做工作,我们只是借用别人的成果写代码就好了。我给大家看一篇论文,大家可以百度或者去知网搜索,闭合 B 样条曲线控制点的快速求解算法及应用。文章讲解了反求控制点的具体步骤,写的非常详细,基本上贴近代码的那种。大家可以根据这篇论文反求控制点,拟合出来的三次B样条曲线是经过 P i P_i Pi的。代码就不放了,很多,可以根据我给的那篇论文直接编写相应代码,有问题可以私信我,知无不言。
    ##4 拟合结果
    这里写图片描述 原轮廓
    这里写图片描述 近似拟合轮廓。可以看到没过黑色特征点,只是近似拟合
    这里写图片描述 插值拟。可以看到曲线经过黑色特征点,不过有一些不足之处。

    ##5 总结
    三次B样条曲线拟合轮廓效果还是可以,较之Beizer(可以参考我博客三次Beizer曲线拟合算法),B样条将一些细节描述的很好,很多细节之处都贴近原轮廓,但是有一些不足之处,可以看到对直线拟合效果不是很好。两篇博客都是关于闭合轮廓的拟合,对于非闭合或者只是一段曲线拟合,还有一种曲线是很好的,《数值分析》提到过,叫三次样条插值拟合,拟合效果很好,我做过拟合一元三次方程曲线,拟合效果跟原曲线非常贴近,不过过程中需要用到追赶法,而追赶法需要满足一个条件,对于闭合曲线三次样条插值是不满足这个条件的,所以我没去深研究,大家可以去试一试。谢谢大家!

    -------------------------------------------------2018-10-30--------------------------------------------
    真的很感谢大家的支持,这一年都比较忙,找实习and找工作,而且这个东西是研一上学期搞的,现在看都毫无印象,对自己说一句:牛逼。我把代码放在网盘了(能运行,但现在没效果,大家可以检查下,之前是OK的),本来想上传到CSDN,好像要C币,而且要审核,太墨迹了。
    链接: https://pan.baidu.com/s/1mSQMmvL71gwEAqgiT6O9Gg 提取码: xv5f

    展开全文
  • 【实例简介】基于OPENGL的B样条曲线生成算法,运行时可拖动特征点,动态调整画出相应的B样条曲线形状【实例截图】【核心代码】B样条曲线└── 实验三B样条曲线├── Debug│ ├── 实验三B样条曲线.exe│ ├── ...

    【实例简介】

    基于OPENGL的B样条曲线生成算法,运行时可拖动特征点,动态调整画出相应的B样条曲线形状

    【实例截图】

    【核心代码】

    B样条曲线

    └── 实验三B样条曲线

    ├── Debug

    │   ├── 实验三B样条曲线.exe

    │   ├── 实验三B样条曲线.ilk

    │   └── 实验三B样条曲线.pdb

    ├── GLUT32.DLL

    ├── ipch

    │   ├── 实验三b样条曲线-24b989e2

    │   │   └── 实验三b样条曲线-6c31cbaa.ipch

    │   └── 实验三b样条曲线-d013edb9

    │   └── 实验三b样条曲线-6c31cbaa.ipch

    ├── 实验三B样条曲线

    │   ├── Debug

    │   │   ├── cl.command.1.tlog

    │   │   ├── CL.read.1.tlog

    │   │   ├── CL.write.1.tlog

    │   │   ├── link.4424-cvtres.read.1.tlog

    │   │   ├── link.4424-cvtres.write.1.tlog

    │   │   ├── link.4424-rc.read.1.tlog

    │   │   ├── link.4424-rc.write.1.tlog

    │   │   ├── link.4424.read.1.tlog

    │   │   ├── link.4424.write.1.tlog

    │   │   ├── link.4788-cvtres.read.1.tlog

    │   │   ├── link.4788-cvtres.write.1.tlog

    │   │   ├── link.4788-rc.read.1.tlog

    │   │   ├── link.4788-rc.write.1.tlog

    │   │   ├── link.4788.read.1.tlog

    │   │   ├── link.4788.write.1.tlog

    │   │   ├── link.command.1.tlog

    │   │   ├── link-cvtres.read.1.tlog

    │   │   ├── link-cvtres.write.1.tlog

    │   │   ├── link-rc.read.1.tlog

    │   │   ├── link-rc.write.1.tlog

    │   │   ├── link.read.1.tlog

    │   │   ├── link.write.1.tlog

    │   │   ├── stdafx.obj

    │   │   ├── vc110.idb

    │   │   ├── vc110.pdb

    │   │   ├── 实验三B样条曲线.lastbuildstate

    │   │   ├── 实验三B样条曲线.log

    │   │   ├── 实验三B样条曲线.obj

    │   │   └── 实验三B样条曲线.pch

    │   ├── GLUT32.DLL

    │   ├── ReadMe.txt

    │   ├── stdafx.cpp

    │   ├── stdafx.h

    │   ├── targetver.h

    │   ├── 实验三B样条曲线.cpp

    │   ├── 实验三B样条曲线.vcxproj

    │   └── 实验三B样条曲线.vcxproj.filters

    ├── 实验三B样条曲线.sdf

    ├── 实验三B样条曲线.sln

    └── 实验三B样条曲线.v11.suo

    7 directories, 46 files

    展开全文
  • B样条曲线曲面

    2011-09-16 16:09:00
    B样条曲线曲面B样条曲线曲面, 介绍了原理以及实现方法等,对研究游戏很有帮助
  • 计算机辅助几何设计始兴于20 世纪60 年代, 最初始于飞机、船舶的外形放样工艺。在当时计算 机发展的影响下, 为了利用计算机更高效地进行设 计, 人们开始寻找研究曲线或曲面的表示方法, ...条曲线, 也称为均匀B 样条曲线
  • 三次B样条曲线

    2016-12-01 15:53:37
    在屏幕上使用鼠标左键绘制数量大于4的任意顶点形成控制多边形,鼠标右键绘制三次B样条曲线,同时在控制多边形的每一个三角形内用虚线表示三次B样条曲线的几何生产原理 编译器VC2010
  • 大二的时候,曾受老师所托,用C++而不是OpenGL去写B样条曲线的教学程序。时隔一年,发现源码找不见了,所以重新写了一遍,也完善了部分功能,顺便发一篇博客分享一下。  这里给出的资源有:两个打包程序、最新版本...

             大二的时候,曾受老师所托,用C++而不是OpenGL去写B样条曲线的教学程序。时隔一年,发现源码找不见了,所以重新写了一遍,也完善了部分功能,顺便发一篇博客分享一下。

            这里给出的资源有:两个打包程序、最新版本的源代码。


    下载链接:(使用时请注明出处哦~~ )

            1.  (新版本)源代码:http://download.csdn.net/detail/mahabharata_/9841652

            2.  (新版本)演示程序:http://download.csdn.net/detail/mahabharata_/9841677

            3.  (旧版本)演示程序:http://download.csdn.net/detail/mahabharata_/9814823


    程序的截图如下:




    说明:  两个版本都是使用纯Qt实现的,没有使用OpenGL所以非常方便阅读。如需要使用win32、MFC等框架编写,也只需在此基础上做简单的修改。

    功能:

          1. 鼠标左键可以添加新控制点,也可以选中并拖动已有的控制点。

          2. 支持1次、2次、3次的B-Spline曲线(即2阶、3阶、4阶)

          3. 可以选择是否显示曲线上关键结点的位置和标号,以及控制点的标号。

          4. Backspace删除末端控制点,C键清屏。


    B样条曲线的相关知识:

          定义:给定n+1个控制点{P0、P1、......、Pn},每个控制点都有对应的一个基函数Ni,p(u),其中u为自变量,i为第i个结点,p为曲线的次数(次数=阶数-1),则可以用下式来定义B样条曲线:

                    

         (定义域: p≤ u ≤ n+1,事实上定义域的上限取多少无所谓)

          根据定义,可以发现B样条曲线上的每一个点其实是:所有控制点的一个加权平均。这里的“权”由基函数Ni,p(u)确定。随着u从下限p逐渐增长,控制点对应的基函数的取值也会随之变化,从而产生曲线上新的点。

    关于基函数Ni,p(u),可以由Cox-de Boor公式得出。这里给出三个简单的基函数的示例:

    (1)当曲线次数p=1时,基函数Ni,1(u)为:


    (2)当曲线次数p=2时,基函数Ni,2(u)为:


    (3)当曲线次数p=3时,基函数Ni,3(u)为:


    展开全文
  • 1.B-样条曲线教程(B-spline Curves Notes)目录 2.运动规划——B样条曲线 3.B样条曲线(B-spline Curves) 4.基于B样条曲线的路径规划(含matlab代码) 5.B样条曲线拟合原理
  • 此程序在MFC下编程而成,可以在界面用光标点上给定点,以此点形成B样条曲线,或是B样条反算曲线,或是Bezier曲线。过往找了好多代码,都不能达到要求,这个是较好的了,只是算法的原理还没有放上来,下次会放的,...
  • 解压密码为:hur.cn 主要采用C++编程实现,过控制点的三次B样条曲线拟合,可以用于各种高级的曲线拟合方面。
  • OpenGL绘制任意阶次B样条曲线

    千次阅读 2019-11-20 10:34:30
    OpenGL绘制任意阶次B样条曲线 ...而且大部分博客所讲的都是三次均匀B样条曲线的绘制,不太符合我想要的任意阶次的B样条曲线,固定次数也就算了,原理也基本没有讲清楚,都是公式直接往上一套得出答案。因...
  • 2次和3次B样条曲线

    2010-06-21 20:09:40
    这是我用vc做的关于B样条曲线的单文档程序,希望对大家有用
  • 实验内容: (1)掌握三次B样条曲线算法原理; (2)掌握三次B样条曲线边界条件特点; 实现功能: a)实现三次B样条曲线绘制算法 b)调用B样条曲线算法来绘制一段汉语、英文或你喜爱的平面图案;
  • B样条曲线的生成原理有很多文章可以搜到,下面分享一个C++的版本,可以根据给定的控制点和阶数生成b样条曲线坐标值得txt文档。 https://download.csdn.net/download/weixin_43568911/13116905
  • B样条曲线

    2018-01-19 08:44:00
    2018-01-19 创建人:Ruo_Xiao ...一、原理 https://www.cnblogs.com/caster99/p/4746652.html?utm_source=tuicool 怕网址丢失,我在这将关键信息截图: 二、源码 %原理:http://wenku.bai
  • 基于B样条曲线的路径规划(含matlab代码)

    千次阅读 多人点赞 2020-05-26 22:48:17
    本文主要解决的是用B样条曲线实现无人车的路径规划,对于B样条曲线的概念不再赘述,有兴趣的朋友可以自行去了解。 下面介绍如何利用B样条曲线对小车进行路径规划。 1.无人车平面曲线规划 1.1无人车位置控制 我们...
  • 该算法结合B样条曲线拟合原理,通过蚁群中蚂蚁个体的混沌行为,调整自由节点位置,通过蚁群的自组织行为自适应地调整内部节点数目,解决了B样条曲线拟合问题。仿真结果表明了CASO-DF算法能够有效实现自由节点B样条...
  • B样条曲线,matlab实现。

    千次阅读 2020-07-13 19:11:11
    二次b样条曲线: p(t) = 1/2 * (1-t) ^2 * p0 + 1/2 * (-2 * t^2 + 2 * t + 1) * p1 + 1/2 * t^2 * p2; 三次b样条曲线: p(t) = 1/6 * (-t^3 + 3 * t^2 - 3 * t + 1) * p0 +1/6 * (3 * t^3 - 6 * t^2 + 4) * p1 + 1/...
  • 不过B样条曲线的公式比较难懂,网上介绍原理的也着实不多,这里详细分享一下。 图1  我们先来看看什么是B样条曲线,如图1,我们以三次B样条曲线为例。由于k次B样条曲线的控制点有k+1个,所以P0P1P2P...
  • PCL——B样条曲线曲面拟合

    千次阅读 2020-08-06 21:35:19
    B样条曲线 样条曲线,是B-样条基函数的线性组合,是贝塞尔曲线的一般化。 给定n+1个控制点,P0,P1, …, Pn以及一个节点向量U = { u0,u1, …, um }, p 次B-样条曲线由这些控制点和节点向量U 定义,设Ni,p(u)是第i个 p...
  • 接上文 计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面8.4 B样条曲线产生背景及定义B样条产生的背景Bezier 曲线曲面有很多优点,比如说可以用鼠标拖动控制顶点以改变曲线的形状,非常直观,给设计...
  • 三次B样条曲线插值c++

    千次阅读 2020-08-23 21:00:56
    B样条拟合通常把离散点集作为控制点来求拟合曲线原理和过程可参看https://blog.csdn.net/cnmgbmsdn/article/details/108141194。 如果想要求得过离散点的插值曲线,需要先用离散点反求控制点,然后用求得的控制点...
  • 在屏幕上使用鼠标左键绘制数量大于4的任意顶点形成控制多边形,单机鼠标右键绘制三次B样条曲线,同时在控制多边形的每一个特征三角形内用虚线显示三次B样条曲线的几何生成原理。 具体要求: (1) 分析原理,写...
  • 轨迹规划——Bezier曲线与B样条曲线

    千次阅读 2020-04-21 11:19:49
    给定n+1个数据点,p0~pn,生成一条曲线,使得该曲线与这些点描述的形状相符。 (如果要求曲线通过所有数据点,则属于插值问题;如果只要求曲线逼近这些数据点,则属于逼近问题。) 2、Bezier曲线的定义 p(t)=∑i=0...
  • Bezier、B样条曲线曲面

    万次阅读 多人点赞 2017-01-19 22:09:43
    这里只列出核心,具体原理参看底部参考文献Bezier曲线 三次Bezier曲线 第一个控制点和最后一个控制点在曲线上: 两端点的切矢方向与控制多边形(特征多边形)的第一和最后一边一致: Bezier曲线...
  • 分布情况把B样条曲线划分成均匀B样条曲线、准均匀B样条曲线、分段贝齐尔曲线、一般非均匀B样条曲线4种 类型,分别对它们的特点和实现方法进行了详细阐述,最后给出了一个完整的各种B样条曲线生成代码和运行结 果,并...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,678
精华内容 3,471
关键字:

b样条曲线原理