B-spline Curves 学习前言与动机(1)

B-spline Curves 学习之前言

 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习。

 (原来博客网址:http://blog.csdn.net/tuqu/article/details/4749586)

 原来的博主翻译还是很好的,所以前几章节直接借鉴参考原博主的内容。



 B-spline Curves Notes

  本 教程是关于B-样条曲线(B-spline Curves)的教程。B-样条曲线在计算机视觉(computer vision ),计算机图形学(Computer Graphics ),计算机辅助设计(Computer-Aided Design ),计算几何(Computational Geometry ) ,可视化(Visualization)等许多领域有着广泛应用。

本教程翻译自C.-K. Shene博士的CS3621 Introduction to Computing with Geometry Notes的第6部分B-spline Curves。(C.-K. Shene博士是a Professor at  Department of Computer Science ,Michigan Technological University)。



1. B样条曲线——动机

 考虑设计一个花瓶的剖面图。下图左边是11次(degree)的贝塞尔曲线;但是它很难弯曲瓶颈到线段 P4P5。当然,我们可以在这个线段附近增加控制点来增加该区域的权重。但是这会增加曲线的次数(degree)。许多情况下,不值得使用如此高次 (degree)的多项式。

  

    如前面讨论过的贝塞尔曲线的导数 ,我们可以将两个贝塞尔曲线连接起来。只要第一条曲线的最后一段和第二条曲线的第一段有相同方向,我们至少可以获得 G1 连续性,因为切向量有相同方向但可能有不同的长度(即,如果长度相同,它就是C1 连续的)。上边中间图使用了这个思想。它有3个3次贝塞尔曲线段,连接点用黄色矩形框标记。这说明有满足 G1 连续条件的多重低阶贝塞尔曲线段,我们可以设计出复杂形状。但是,保持 G1 连续条件会是乏味和不受欢迎的。

   有没有可能我们仍用更低阶曲线段而不用考虑 G1 连续条件?

  B-样条曲线是贝塞尔曲线的推广且正是为了解决这个问题的。上边右图是一个8控制点的3次B-样条曲线。实际上,由5条3次贝塞尔曲线段连接起来形成了由 控制点定义的B-样条曲线。 上图中,那些小点把B-样条曲线划分为贝塞尔曲线段。可以像贝塞尔曲线那样移动控制点来修改曲线的形状。我们也可以修改曲线的细分 (subdivision)。因此B-样条曲线有更高阶曲线设计的自由度。

  直接细分(Subdividing)曲线是很困难的。因此,我们细分曲线的定义域。因此,如果曲线的定义域是[0,1],这个闭区间被称为节点(knots)的点细分而成。设这些节点是 0 <= u0 <= u1 <= ... <= um <= 1。那么点C(ui)的曲线细分如下图所示,因此,修改[0,1]的细分会改变曲线的形状。

  

  总之,为了设计一个B-样条曲线,我们需要一系列的控制点,一系列的节点和一系列的系数,每个系数对应一个控制点,所以所有曲线段连接在一起满足某个连续 条件。系数的计算可能是最复杂的步骤因为它们必须保证某个连续条件。幸运的是,这个计算在本课程中不需要。我们只需要知道相关特性用于B-样条曲线的推理就可以了。

时间: 2024-10-13 00:53:06

B-spline Curves 学习前言与动机(1)的相关文章

B-spline Curves 学习之B样条曲线定义(4)

B-spline Curves: Definition 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习. (原来博客网址:http://blog.csdn.net/tuqu/article/details/4749586) 原来的博主翻译还是很好的,所以前几章节直接借鉴参考原博主的内容. 给定 n + 1个控制点P0, P1, ..., Pn 和一个节点向量U = { u0, u1, ..., um },  p 次B-样

构建高可用web站点学习--前言

前言:本人对于提高web站点的访问量等的有很浓厚的兴趣,也学习了将近一年的时间,希望能总结点东西,虽然很多东西都是从书籍和资料中学习的,而不是原创,但是这是我总结的一点感悟和进行的分类吧. 本系列文章大多为谈论一些基本思想.至于代码实现和服务器的搭建和配置,可能不会涉及到,不过其中会涉及到一些基本的参数配置,所以要求对服务器的搭建和配置有基本的了解.因为搭建和配置的资料网上和书本都 很多,我在这里就能不说就不说了.免得影响文章的长度和关注的焦点. 目录结构: (一)单个服务器如何处理请求 (二)

B-spline Curves 学习之B样条基函数计算实例(3)

B-spline Basis Functions: Computation Examples 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习. (原来博客网址:http://blog.csdn.net/tuqu/article/details/4749586) 原来的博主翻译还是很好的,所以前几章节直接借鉴参考原博主的内容. 1. 简单节点(Simple Knots ) 假设节点向量是U = { 0, 0.25, 0.5

网站设计学习前言

看到这篇文章后,有人的想说:这不是"专注于Linux及Android底层开发学习"的吗,怎么又搞起网站设计了?哈哈!现在是 科技时代,也是网络时代,多接触点社会需求的知识,是没有害处的了.当然了这要从我在凌阳教育参加培训时说起,做智能家 居项目时接触了点网页制作的知识,感觉挺有意思的,便对她一件钟情啊!从此她便深深的留在了我的内心深处,只因当时在 苦战Linux学习中的我,还没有太多时间和她"谈恋爱",现在工作也步入正规了,自己也老大不小,除了工作外,也该谈谈恋爱了

第一节 深度学习前言

毫无疑问,神经网络在深度学习中扮演着极其重要的作用.可以毫不犹豫的说,深度学习就是各种各样的神经网络.俗话说工欲善其事必先利其器,如果想要掌握深度学习算法,神经网络的实现就必须要了解.所以,今天我们来了解并用Python实现出一个神经网络. 首先我们需要导入一个数据库,其代码如下: import numpy as np import sklearn import sklearn.datasets import matplotlib.pyplot as plt import sklearn.lin

学习前言

1.奠定java的语法基础 学习java的第一步,就是学会使用java这个程序语言来编写程序,而学习程序语言的第一步就是熟悉其语法的使用.程序语言就是一门语言,所不同的是这种语言是用来与计算机沟通的,所以若要熟悉语言,使用的方法莫过于多看别人写的程序,了解别人是如何使用java来解决问题的,然后针对同样的程序进行练习,并从实例中测试自己是否真正了解到如何解决问题. 2.加入论坛参与讨论 在学习的过程中,如果有人可以共同讨论,将会加速学习的速度.可以找一个讨论区并摸索当中的资源,这可以省去不少的学

Flask学习-前言

前言 使用Flask断断续续加起来快一年了,但是一直没有从源码层去了解其实现原理.加上自己python基础不扎实,所以准备从看一个开源项目开始,希望能够从中窥得武功精髓,让自己水平更上一层楼. Flask Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架.Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要

JavaScript学习前言

‌JavaScript 包含三大部分  ECMScript,DOM,BOM 它是一种脚本语言,我想只要是做开发的多多少少都会用一些,但是很少有人系统的学过(前段开发除外),但是由于很多公司的分工并不明确,一般应用软件需要前端和后端都做,我工作就属于这种类型,我发现很多时候70%到80%的时间都花在前端效果的实现上,写了那么久还是觉得前端好难,js效果好痛苦,我想和我有共同困扰的同学应该有很多,所以我决定系统学习一下javascript 并分享出来.这就是<写好javascript并不难系列>,

Linux学习前言部分

一.描述计算机的组成及其功能. Von Neumann architecture计算机五大组成部分:运算器.控制器.存储器.输入设备.输出设备 二.描述内核功能以及作用 系统内核是计算机操作系统的基础部分,直接与计算机硬件交互,核心功能是内存管理与cpu时间分配.linux内核还包括了各类设备驱动.内核为应用程序提供系统调用服务,使得应用程序可以利用计算机的各类硬件资源. 三.按系列罗列常见Linux的发行版,并描述不同发行版之间的联系与区别. Debian: dpkg,前端管理工具:apt-g