Bezier Curve贝塞尔曲线概念

article/2025/10/18 19:33:49

一、贝塞尔曲线的概念 
        对于两点之间的连线,我们可以用直线进行连接效果如下:

        其中的每一个F点都在AB连接的线段上。

        这就是一阶贝塞尔曲线。

       

 如果我们加入一个控制点C,那么做图如下:

 

       1、连接AC,BC;

        2、在AC,BC上找到 AD/AC = CE/CB 的点D,E;

        3、连接DE,在DE上寻找点F,F点需要满足:EF/ ED = AD/AC = CE/CB;

        4、找出所有F点,连接而成的线,就是贝塞尔曲线;

       两个线段根据等比关系找点的贝塞尔曲线,一般也称为二阶贝塞尔曲线。

       关于贝赛尔曲线的基本数学理论大概就是上面的内容。

       除了二阶贝塞尔曲线外还有三阶,四阶贝塞尔曲线,它们的控制点依次增加,我们常用的是三阶贝塞尔曲线,有两个控制点,控制点决定着生成完成后曲线的形状。

      三阶贝塞尔曲线的绘制示意图如下:

 

     1、首先连接AC,AB,BD;

     2、找到EFG三点,满足 AE/AC = BF/BA = DG/DB;

     3、连接EF.FG;

     4、找到J,I两点,满足 AE/AC = BF/BA = DG/DB = FJ/FE = GI/GF;

     5、连接JI两点;

     6、找到H点,满足AE/AC = BF/BA = DG/DB = FJ/FE = GI/GF = IH/IJ;

     7、F点从A移动到B,所计算出的H点连成的线,就是三阶贝塞尔曲线;

二、三阶贝塞尔曲线控制点的计算方法
        介绍完了什么是贝塞尔曲线,现在来说遇到的问题:

        现在已知有A,B.C.D,E,F,G,H点若干个,假如它们直线连接如下

 

       可以看出,连接直线并不平滑,在连接点上会出现方向突变。

       如果想要生成光滑曲线,需要进行控制点计算,计算出A,B,C,D,E,F,H各个带你的控制点进行计算

       每个位置要计算出左右两个控制点L1,L2:

算法如下:

1、两端的控制点位置为自己本身,例如A点控制点位置L1=L2=A ,G点 L1=L2=G;

2、中间控制点的位置由左右两个点的位置决定,例如C点的控制点位置通过计算BCD连接而成的三角形决定;

3、计算向量和 与三角形BCD的夹角 ;

4、计算垂直于三角形BCD所在平面的单位向量,计算方法为的向量积,再归一化;

5、向量绕轴旋转 ( - )/ 2 度 得到向量;

6、向量绕轴旋转 -( - )/ 2 度得到向量 ;

7、将5,6计算结果乘以一个比例因子的到向量CL1 与CL2(的大小决定曲线的形状,一般设置在0.5以下);

8、L1坐标 = CL1 + C , L2坐标 = CL2 + C;

    注:如果为180度,那么跳过4,5,6步的计算

————————————————

原文链接:https://blog.csdn.net/q943520218/article/details/103827268

 


http://chatgpt.dhexx.cn/article/BA3Ym2WE.shtml

相关文章

贝塞尔(贝兹尔)曲线介绍

2019独角兽企业重金招聘Python工程师标准>>> 贝塞尔(贝兹尔)曲线介绍 什么是贝塞尔曲线? “贝赛尔曲线”是由法国数学家Pierre Bzier所发明,由此为计算机矢量图形学奠定了基础。它的主要意义在于无论是直线或曲线都能在数学上予以描述。贝塞尔…

【ARM】-栈帧

ARM 栈帧 本系列均以 corter-A7(armv7-a) 为例 在 ARM 中,通常为满减栈(Full Descending FD), 也就是说,堆栈指针指向堆栈内存中最后一个填充的位置,并且随着每个新数据项被压入堆栈而递减。 栈的本质 要理解栈的本…

JVM 栈和栈帧

tag: jvm,stack,stack frame,栈,栈帧 原文:JVM Stacks and Stack Frames 翻译:陈同学 欢迎访问陈同学博客原文,文章可读性更佳 前情提要 对于没有深度递归的函数来说,无需担心上篇文章中的算法。当知道正在处理数据集有限时&am…

C语言的函数栈帧

⭐️前面的话⭐️ 📒博客主页:未见花闻的博客主页 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📌本文由未见花闻原创,CSDN首发! ✉️坚持和努力一定能换来诗与远方! &…

【C语言】函数栈帧的创建和销毁(1)

前言: ❓ 在我们前期学习C语言时,你是否曾产生过很多困惑? 💭 比如:局部变量是怎么创建出来的?因为局部变量的值是随机值,我们建议将它初始化,那么为什么局部变量的值是随机值&am…

函数栈帧(详解版)

文章目录 前言1.浅谈C语言内存1.1 内存分配1.2 栈1.3 寄存器 2. 为main()函数开辟栈帧3.变量的初始化及函数调用4.ADD函数4.1 ADD函数的创建4.2 ADD函数使用与销毁 5.总结 前言 前期学习的时候,我们可能有很多困感? 比如: ●局部变量是怎么创建的?I为什么局部变量…

也谈栈和栈帧

 一个码农要是没遇见过coredump,那他就是神仙了。core file(coredump的转储文件)中保存的最重要内容之一,就是函数的call trace。还原这部分内容 (栈回溯) ,并与原代码对应上,尽快找出程序崩溃的位置和…

(栈帧和函数调用一)栈帧,函数调用与栈的关系

(栈帧和函数调用一)栈帧,函数调用与栈的关系 一,栈帧的介绍二,函数调用与栈的关系三,汇编演示四,总结 在计算机科学中,栈是一个特殊的容器,用户可以将数据压入栈中&#…

理解栈帧和栈的运行原理

栈中的数据都是以栈帧(Stack Frame)的格式存在,栈帧是一个内存区块,是一个数据集,是一个有关方法 (Method) 和运行期数据的数据集,当一个方法A被调用时就产生了一个栈帧 F1,并被压入到栈中&…

函数栈帧的形成与释放

✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!! 📃个人主页:rivencode的个人主页 🔥系列专栏:玩转C语言 💬推荐一…

【函数栈帧的创建和销毁】(超详细图解)

想必大家在学完C语言函数章节之后,是否有这样的困惑: 局部变量是怎么创建的 ? 为什么局部变量的值是随机值 ? 函数是怎么传参的?传参的顺序又是什么样的 ? 形参和实参是什么关系 ? 函数调用…

C语言函数栈帧详解

系列文章目录 前言 最近正在学习栈帧方面的知识,由于本人对汇编不太熟悉,对其中频繁出现的ESP寄存器和EBP寄存器一直没搞清楚,在查找资料后,在此进行整理,方便以后温故知新。 一、预备知识 要清楚理解栈帧的概念&…

详解栈帧结构

https://www.1024do.com/?p367 栈帧结构 含义:C语言中,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量。栈帧也叫过程活动记录,是编译器用来实现过程函数调用的一种数据结构。 从逻辑上讲,栈帧就是…

函数栈帧详解

目录 一.什么是函数栈帧 1.寄存器: 2.函数栈帧 3.栈帧的作用和维护 4.栈帧结构 二.函数栈帧的创建 1.汇编代码 2.main函数函数栈帧的创建 1.汇编语言讲解: 2.栈帧创建: 3.详细步骤 3.ADD函数栈帧的创建 栈帧创建: 3.函…

栈帧

首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(地址地)。下图为典型的存取器安排,观察栈在其中的位置 入栈操…

什么是函数栈帧

函数栈帧的创建与销毁 一、函数栈帧的创建1.寄存器2.函数栈帧3.函数中调用函数 二、函数栈帧的销毁总结 一、函数栈帧的创建 1.寄存器 一般来说,计算机中的寄存器有六种 分别是:eax, ebx, ecx,edx,ebp,esp 而ebp,esp这两个寄存器中存放的是地址&#…

栈帧 stack frame

栈帧 stack frame 每一次函数调用都会维护一个栈帧(stack frame),栈帧主要用于传递参数、保存返回地址、保存局部变量等。先直接上一个《深入理解计算机系统》上的原图。 其中,%rsp 指向栈顶位置,%rbp 指向栈底位置。…

C/函数栈帧

🌱博客主页:大寄一场. 🌱系列专栏:C语言学习笔记 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 ​ 目录 前言 寄存器 1. 寄存器的种类与功能 C语言汇编指令介绍 函数栈帧的创建与销毁过程 1.函数栈帧的…

浅谈函数栈帧(Stack Frame)

💙作者:阿润菜菜 📖专栏:C 本文目录 什么是栈帧 在调试中观察 总结 什么是栈帧 那我们先来看看什么是栈: 栈(stack)是限定仅在表尾进行插入或者删除的线性表。栈是一种数据结构,它按照后进先出的原则存储…

栈和栈帧

栈 堆栈(stack)又称为栈或堆叠,是计算机科学里最重要且最基础的数据结构之一,它按照FILO(First In Last Out,后进先出)的原则存储数据。 栈的相关概念: 栈顶和栈底:允许元素插入与删除的一端…