欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

双圆弧插值算法(一)

程序员文章站 2022-07-10 15:50:15
双圆弧插值算法(一)Biarc Interpolation在游戏开发中经常出现两点间的插值问题。大多数情况下,只需要一个简单的线性插值。线性插值很好,因为不会真的弄错。只有一条可能的线连接这些点。跟着走。当需要曲线插值时,求解会变得复杂得多。有无限数量的曲线可供选择,并有许多方法来生成:NURBS、Catmull Rom、Bézier、Hermite等。想讨论一种生成圆形圆弧的不太常见的方法。为什么想要一个圆插值?一个原因可能是看起来很悦目,但也有一些实际用途。如果正在制作一个放置道路的水平编辑工...

双圆弧插值算法(一)

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