双圆弧插值算法(一)
双圆弧插值算法(一)
Biarc Interpolation
在游戏开发中经常出现两点间的插值问题。大多数情况下,只需要一个简单的线性插值。线性插值很好,因为不会真的弄错。只有一条可能的线连接这些点。跟着走。当需要曲线插值时,求解会变得复杂得多。有无限数量的曲线可供选择,并有许多方法来生成:NURBS、Catmull Rom、Bézier、Hermite等。
想讨论一种生成圆形圆弧的不太常见的方法。
为什么想要一个圆插值?一个原因可能是看起来很悦目,但也有一些实际用途。如果正在制作一个放置道路的水平编辑工具(或使用程序性道路制作游戏),可能希望转弯处与真实世界中的道路相似。第二个例子,也是经常遇到的一个例子,是在剑后产生轨迹。挥剑的动作通常非常快。当剑在攻击中弧线时,只能得到几个样本点。如果以慢动作播放动画,会发现剑尖的轨迹相当圆。通过在采样点之间生成圆弧,可以生成干净的轨迹。
这里有一个为间谍编程的剑迹的例子。整个旋转过程中可能只有五到六个样本,但能够创建一个平滑的顶点弧。Spyborgs算法与将要介绍的有点不同,但是产生了类似的结果(如果知道要查找什么,实际上会稍微差一点)。
那么,要如何创建这些曲线呢?解决方案在于一个称为biarc的几何学。
双圆弧
双圆弧是由两个圆弧组成的曲线,使与匹配的切线相连。几乎每一对控制点都可以通过一个biarc连接起来,而失败的控制点在实践中并没有出现。下面是一些将红色控制点连接到蓝色控制点的biarc示例。
一旦可以求解两个控制点之间的biarc,那么将一系列控制点与一系列biarc连接起来就很简单了。这就是所谓的分段圆曲线。
目标
将生成两个圆弧作为输入。
假设输入切线是标准化的。换句话说:
找到连接
在求解弧之前,需要找到连接点,pm。
现在可以选择d1的任意实数,得到系统的解。根据值的不同,可以得到一个短的biarc或一个长的螺旋biarc。在右边的图像中,可以看到d1的不同值如何生成连接相同两个控制点的不同biarc。稍后将讨论自动为d1选择一个令人满意的值的方法。
边缘案例
如果d2方程中的分母为零,需要处理d2为无穷大的情况。这意味着t2和连接点的切线是平行的。这将创建一个半圆(请参见右侧显示的蓝色弧)。知道连接切线是t2,可以说明以下内容:
连接点pm必须位于q1外与t2平行的线上。
从p2到pm的向量必须垂直于t2。
从数学上讲,这是:
本文地址:https://blog.csdn.net/wujianing_110117/article/details/107329599
推荐阅读
-
戴尔发布全新XPS二合一笔记本 颜值性能双爆表
-
简洁明了的插值音频重采样算法例子 (附完整C代码)
-
作业笔记:基于二次插值的Wolfe-Powell非精确线搜索算法及Python代码实现
-
支持双路视频插帧技术 一加8 Pro刷B站:独家享受120帧番剧
-
一道简单的算法题:不借助第三变量来交换两个变量的值
-
【机器人学】机器人开源项目KDL源码学习:(6)笛卡尔空间轨迹规划、圆弧过渡、姿态插值、梯形速度、pathlength
-
算法————双栈实现队列、双队列实现栈、实现一个栈Push(出栈)Pop(入栈)Min(返回最小值的操作)的时间复杂度为O(1)
-
数据结构与算法-有序表查找(折半查找、插值查找、斐波那契查找)
-
查找算法(二分查找,插值查找,斐波那契查找)
-
七大查找算法(顺序查找、折半查找、插值查找、斐波那契查找、分块查找、哈希查找、树表查找)