http://blog.csdn.net/mahabharata_/article/details/71856907

大二的时候,曾受老师所托,用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)为:

[图形学] B样条曲线 - 原理和C++实现的演示程序(附源码)的更多相关文章

  1. 【原】 Spark中Task的提交源码解读

    版权声明:本文为原创文章,未经允许不得转载. 复习内容: Spark中Stage的提交 http://www.cnblogs.com/yourarebest/p/5356769.html Spark中 ...

  2. 【原】Spark中Stage的提交源码解读

    版权声明:本文为原创文章,未经允许不得转载. 复习内容: Spark中Job如何划分为Stage http://www.cnblogs.com/yourarebest/p/5342424.html 1 ...

  3. 【原】Spark中Job的提交源码解读

    版权声明:本文为原创文章,未经允许不得转载. Spark程序程序job的运行是通过actions算子触发的,每一个action算子其实是一个runJob方法的运行,详见文章 SparkContex源码 ...

  4. 点单登录原理和java实现简单的单点登录

    引用自:http://blog.csdn.net/zuoluoboy/article/details/12851725 摘要: 单点登录(SSO)的技术被越来越广泛地应用到各个领域的软件系统当中.本文 ...

  5. iOS开发UI篇—程序启动原理和UIApplication

    iOS开发UI篇—程序启动原理和UIApplication   一.UIApplication 1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就 ...

  6. iOS开发UI篇—程序启动原理和UIApplication1

    iOS开发UI篇—程序启动原理和UIApplication   一.UIApplication 1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就 ...

  7. 程序启动原理和UIApplication

    iOS开发UI篇—程序启动原理和UIApplication   一.UIApplication 1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就 ...

  8. Jquery+ajax+json+servlet原理和Demo

    Jquery+ajax+json+servlet原理和Demo 大致过程: 用户时间点击,触发js,设置$.ajax,开始请求.服务器响应,获取ajax传递的值,然后处理.以JSON格式返回给ajax ...

  9. Mybatis插件原理和PageHelper结合实战分页插件(七)

    今天和大家分享下mybatis的一个分页插件PageHelper,在讲解PageHelper之前我们需要先了解下mybatis的插件原理.PageHelper 的官方网站:https://github ...

随机推荐

  1. fmt.Sprintf格式化使用

    格式化写法: fmt.Sprintf(格式化样式, 参数列表-) 参数说明: 格式化样式:字符串形式,格式化动词以%开头. 参数列表:多个参数以逗号分隔,个数必须与格式化样式中的动词个数对应,否则运行 ...

  2. BMIP002协议介绍

    比原BMIP002协议 概述 比原链技术社区最近提出了一套资产规范提议,该提议允许在issue类型的交易中实现标准资产token.该标准定义资产在链上的基本功能,以及发行人通过智能合约管理资产的规范. ...

  3. call 和 apply方法解析

    ECAMScript 3给Function的原型定义了两个方法,它们是 `Function.prototype.call` 和 `Function. prototype.apply`.在实际开发中,特 ...

  4. 流程与IT管理是未来IT行业发展的必经之路

    流程与IT管理是未来IT行业发展的必经之路 PM圈子 百家号17-11-2411:30 本文由“光环国际”—中国项目管理PMP培训上市企业转载 IT部门的职责之所以能够从辅助部门发展成业务支撑部门,最 ...

  5. oracle 11g RAC 的基本操作(一)------启动与关闭

    启动RAC 手工启动按照HAS, cluster, database的顺序启动,具体命令如下: 启动HAS(High Availability Services),必须以root用户 [root@or ...

  6. react-native webView android使用本地html问题

    react-native WebView组件使用本地html时候,一般都是这样使用 var source = require('../html/my.html') : <WebView sour ...

  7. 实验八 <FBG> 基于原型的团队项目需求调研与分析

    <FBG>团队项目原型设计:http://www.cnblogs.com/ymm3/p/9012534.html GitHub的链接地址:https://github.com/FBGfbg ...

  8. js统一设置富文本中的图片宽度

    var txt = layedit.getContent(ieditor);//获取编辑器内的文本var regex = new RegExp('<img', 'gi');txt = txt.r ...

  9. wordpress百度熊掌号“搜索结果出图”改造代码

    <?php if(is_single()||is_page()){ echo '<script type="application/ld+json">{ &quo ...

  10. NPM 报错--fs: re-evaluating native module sources is not supported. If you are using the graceful-fs module

    fs: re-evaluating native module sources is not supported. If you are using the graceful-fs module 解决 ...