图形学-几何-曲线与曲面

news2025/7/20 20:58:11

1.什么是曲线

我们使用一系列的点去定义一条曲线。这些控制点描述了曲线的一些性质。最常见的曲线叫做贝塞尔曲线(Bézier Curve)。

1.1 贝塞尔的画法

在三个点的情况下。在二维情况下,使用三个控制点画出的贝塞尔曲线称为二次贝塞尔曲线(quadratic Bézier)。这是由Pierre Bézier 和 Paul de Casteljau 提出的算法,称为 de Casteljau 算法。

在这里插入图片描述
对于 b0, b1, b2 定义的贝塞尔曲线,我们将求贝塞尔曲线的过程转换成求在 𝑡 ∈ [0, 1] 时刻,对应贝塞尔曲线上的点。

在某一时刻 𝑡 对应的点可以按照以下方法求出:

  1. 求出线段 b0b1 和线段 b1b2 上对应 𝑡 时刻的点 b01b11这个点可以将线段分割为长度 𝑡 和 1 − 𝑡;
  2. 将 b01, b11 连接起来后,重复步骤 1 即可。点 b02 就是我们得到的最终点。

这是一个递归的计算过程。任何一个点都是时间 𝑡 的一个映射,因此这是显式的几何表示。

在多个点的情况下

在多个点的情况下,我们只需要仿照三个点的情况,每一次都在对应线段上找到对应时刻 𝑡 所对应的点,并将相邻的点连成线段后重复上面的过程,直到得到最后一个点
在这里插入图片描述

1.2 贝塞尔曲线的数学表示

通过上一节我们可以看出贝塞尔曲线的画法是类似于递归的方式画出的。我们也知道贝塞尔曲线上的点只和参数 𝑡 有关。因此我们可以得到曲线的数学表示。
在这里插入图片描述
其中 𝐵𝑗𝑛(𝑡) 是 Bernstein 多项式,它是 (𝑡 + (1 − 𝑡))𝑛 二项分布的第 𝑛 项展开:
在这里插入图片描述
在三维情况下,公式不变。所有的点变成三维空间上的点进行计算即可。

1.3 贝塞尔曲线的性质

贝塞尔曲线满足以下性质:

  1. 贝塞尔曲线必须过起点和终点;
  2. 在四个控制点的情况下,贝塞尔曲线在起点的切线是 𝑏′(0) = 3(𝑏1−𝑏0),终点的切线是 𝑏′(1) = 3(𝑏3−𝑏2);
  3. 对贝塞尔曲线做仿射变换生成的曲线等同于对贝塞尔曲线的控制点做仿射变换后再生成的贝塞尔曲线,这个规律不适用于投影变换;
  4. 凸包性质。画出的贝塞尔曲线一定在控制点所形成的凸包内。凸包是能够包围所有点的最小凸多边形。

1.4 逐段定义贝塞尔曲线

当我们使用过多的控制点定义一条曲线时,曲线会变得比较平滑,并且不便控制。因此我们一般使用逐段的方式定义贝塞尔曲线。我们每次使用 4 个控制点。我们会把前两个点和后两个点各看作一个控制杆来控制整个曲线。这和 Photoshop 中的钢笔工具是一致的。

对于逐段的贝塞尔曲线,我们需要保证其连续性,我们对连续性有以下定义:

  • 如果两条分段曲线的起点和终点重合,那么称为 C0 连接;
  • 在上面的情况下,如果第一条曲线终点的切线和第二条曲线起点的切线一样,那么称为 C1 连接;
  • 在上面的情况下,如果这两个点的 n 阶导数相同,那么称为 Cn 连接。

一边情况下 C1 连接就显得足够光滑。在某些特殊情况下我们需要更高阶的连续。

2. 样条曲线

样条曲线(Split Curve)可以形象地理解为在定义了多个控制点后,在这些控制点上固定一个有弹性的木条形成的曲线。在任何一点上不论几阶导数都是连续的。最常见的样条曲线称为 B-样条(Basis)。

3. 曲面

我们可以通过曲线的定义扩展出曲面(Surface)的定义。

3.1 贝塞尔曲面

贝塞尔曲面的计算类似于双线性插值的过程。我们使用 4 × 4 个点形成贝塞尔曲面。首先,我们在每一行生成 4 条贝塞尔曲线,接下来在 4 条贝塞尔曲线上找到相同时刻对应的 4 个点生成一条新的贝塞尔曲线。这些贝塞尔曲线的集合形成了贝塞尔曲面。对于贝塞尔曲面,我们需要两个变量 𝑢, 𝑣 对其进行数学表示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7898.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第三节.常用Linux命令—文件和目录

第三节.常用Linux命令—文件和目录 1.查看目录内容:ls 1).功能: 列出目录的内容 2).常用选项: 参数含义-a显示指定目录下所有子目录和文件,包含隐藏文件(以 开头的文件)-l以列表形式显示文件的详细信息-h配合 -l 以人性化的方式显示文件大小 3).计算机中文件大小…

【数据结构初阶】(栈和队列)图文详解四道oj+三道easy概念题

你也会感到孤独吗? 文章目录一、队列和栈的接口二、有效的括号2.1 思路呈现2.2 代码呈现细节讲解三、用队列实现栈3.1 思路呈现3.2 代码呈现细节讲解3.3 总结四、用栈实现队列4.1 思路呈现4.2 代码呈现细节讲解4.3 总结五、设计循环队列5.1 思路呈现5.2 数组5.3 链表…

海思3559AV100 gdb+gdbserver调试·基础篇

问题描述 随着程序越来越复杂,单靠输出信息调试程序已然是不合适的,所以必须考虑使用gdb调试,由于板子上比较难加载代码,所以最合适的办法应该是gdbgdbserver远程调试,这样我们可以清楚地看到程序的运行信息。gdb官方…

第三章 组合逻辑电路

思维导图 笔记 组合逻辑电路 电路在任意时刻的输出状态仅由该时刻的输入信号决定,与电路在此信号输入之前的状态无关。 组合逻辑电路的分析 分析步骤 ①根据逻辑电路图,写出输出逻辑函数的表达式 ②根据逻辑表达式,列出真值表 ③由真值表或…

前端动画的另一种方式 json动画

前言 一谈到前端动画,最先想到的就是css3,当然这是其中一种方式,甚至有许多动画库,aniamte.css就是其中的一种。 我之前也谈到过三种做前端动画的方式 https://blog.csdn.net/glorydx/article/details/116102127 但现在&#x…

linux笔记(2):vscode插件remote WSL远程使用交叉编译工具链(全志D1-H)

文章目录1.前期准备1.1 Windows有对WSL文件读写的权限1.2 WSL的C语言编译环境已经搭建完毕2.在windows的vscode安装remoteWSL插件3.从ubuntu启动windows端的vscode4.使用vscode编译ubuntu端的c文件4.1 在《tasks.json》指定可视化make命令4.2编写Makefile文件4.3 开始编译4.3.1…

27服务-安全访问状态转换

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文将介绍安全访问状态图——作为UDS27服务的规范性附件。 可参考前两篇文章: 27服务-SecurityAccess UDS - 深论Security Access Service 27服务的初衷就是防止无权限人员进行非法数据操作&#xff…

Day801.内存问题排查方案 -Java 性能调优实战

内存问题排查方案 Hi,我是阿昌,今天学习记录的是关于内存问题排查方案。 碰到内存持续上升的情况,其实很难从业务日志中查看到具体的问题,那么面对多个进程以及大量业务线程,该如何精准地找到背后的原因呢&#xff1…

STM8S903K3基于ST Visual Develop开发定时器1中断示例

STM8S903K3基于ST Visual Develop开发定时器1中断示例 📌相关篇《STM8S903K3T6C基于IAR开发GPIO点灯示例》 🎉在基于STVP环境下和IAR环境下,如果都使用寄存器操作,那么差异不大,主要在中断函数的书写上有差异。 &#…

QSystemTrayIcon——实现系统托盘

QSystemTrayIcon类 QSystemTrayIcon QSystemTrayIcon是qt中专门用于处理系统托盘的类 头文件#include qmakeQT widgetsSinceQt 4.2InheritsQObject QSystemTrayIcon 支持Windows、macos和部分Linux桌面环境,可以通过 QSystemTrayIcon::isSystemTrayAvailable()方…

0基础学习——了解操作符的那些事(一)

小叮当的任意门操作符分类1. 算数操作符2. 移位操作符二进制(小插曲)左移动操作符右移操作符3. 位操作符& 按位与 &按位或 |按位异或 ^赋值操作符复合赋值符单目操作符操作符分类 在这里我们有:算数操作符 移位操作符 等 今天我们就先…

uni-App获取地图address与高德地图API配合

现在使用获取地图,不需要再去安装sdk,只需要和我一样执行下方代码可以解决问题(这里会从先获取经纬度,再到经纬度转成具体的地址,最后补充定位当前位置),并且当中会提及到很多,自己开…

深度学习模型的参数、计算量和推理速度统计

在没有过拟合的情况下,相同模型结构下,一般模型的参数量和计算量与最终的性能成正比,在比较不同模型性能时,最好能保持模型参数量和计算量在相同水平下,因此相应参数的统计很重要。这里只进行理论计算,最终…

MySQL的下载与安装

1. 下载地址 官网:https://www.mysql.com 2. 打开官网,点击DOWNLOADS 然后,点击 MySQL Community(GPL) Downloads 3. 点击 MySQL Community Server 这里在Windows 系统下推荐下载 MSI安装程序 ; 点击 My Go to Download Page…

中国医药院外流通市场分析

医药流通行业概览 医药流程市场主要分为院内、院外。 与院内市场终端相比,院外市场终端(特别是基层医疗层级终端)数量更多、规模更 小以及分布分散。此外,院外市场终端的服务区域半径有限,仅服务于一定地理区域内的 终端客户。因此&#xff…

【面试题】 ES6 类聊 JavaScript 设计模式之行为型模式(二)

本文是《ES6 类聊 JavaScript 设计模式》的第四篇,介绍第三种类型的设计模式行为设计模式,其特别关注对象之间的通信。 在软件工程中, 行为型模式为设计模式的一种类型,用来识别对象之间的常用交流模式并加以实现。如此&#xff0…

【Linux】进程控制

目录🌈前言🌸1、进程创建🍡1.1、概念🍢1.2、fork()之后执行顺序🍧1.3、fork()返回值🍨1.4、写时拷贝🍩1.5、fork创建失败问题🍁2、进程终止🍲2.1、概念🍱2.2、…

【附源码】Python计算机毕业设计数据学院工作量管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

力扣刷题day48|583两个字符串的删除操作、72编辑距离

文章目录583. 两个字符串的删除操作动态规划思路一动态规划思路二动态规划五部曲72. 编辑距离思路动态规划五部曲583. 两个字符串的删除操作 力扣题目链接 给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符…

K_A05_001 基于 STM32等单片机驱动8X8点阵模块(MAX7219)显示0-9

目录 一、资源说明 二、基本参数 1、参数 2、引脚说明 三、通信协议说明 工作时序 对应程序: 四、部分代码说明 1、接线说明 1.1、STC89C52RC8X8点阵模块(MAX7219) 1.2、STM32F103C8T68X8点阵模块(MAX7219) 2、亮度调节 五、基…