Interpolating a cardinal curve in C#(用C#实现基数曲线的插补)
问题描述
我需要手动插补一条基本曲线/样条线--这是由System.Drawing的DrawCurve方法创建的曲线类型。我已经找到了DeCastelJau算法的一个很好的C示例,可以用Bezier来实现这一点。遗憾的是,我找到的这类曲线的所有例子都是纯粹的数学符号,对我来说可能是楔形的。
谁能给我举一个插补(所有的点都相交)这种曲线的例子,用编程语言演示,这就是我所知道的阅读方法?
编辑:
我被要求举一个我不熟悉的纯数学方法的例子。这是我能找到的最冗长的一个,我想它会给您提供最多的工作:https://www.sciencedirect.com/science/article/pii/0021904569900409
推荐答案
Microsoft基数样条线是一种三次Hermite spline。
Hermite样条线由这些点的端点和切线向量P0, P1, m0, m1
描述。
对于点集的内插,基数样条线提供一阶连续性(相邻样条线的值和切线是同步的)。为此,需要在第k
点处设置切线
m(k) = (1-c) * (P(k+1) - P(k-1)) / (t(k+1)-t(k-1))
其中c是张力,P(k)
是数据集的第[2-1]点,t(k)
是用于归一化的某些参数。有时使用索引(c.f.更一般的Kochanek-Bartels样条使用分母2作为指数差),有时点之间的累积距离-我怀疑MS可能会使用这种方法等。
这样您就可以计算数据集每个点的切线m(k)
(不包括开始和结束点-这里只基于单个邻居应用切线),并以Hermite形式(基础)构建样条线。
p0 (Bezier) = p0 (Hermite)
p3 (Bezier) = p1 (Hermite)
p1(Bezier) = p0(Hermite) + m0/3
p2(Bezier) = p1(Hermite) - m1/3
这篇关于用C#实现基数曲线的插补的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:用C#实现基数曲线的插补
基础教程推荐
- 如何激活MC67中的红灯 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01