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#实现基数曲线的插补


基础教程推荐
- 如何动态获取文本框中datagridview列的总和 2022-01-01
- JSON.NET 中基于属性的类型解析 2022-01-01
- 从 VS 2017 .NET Core 项目的发布目录中排除文件 2022-01-01
- 错误“此流不支持搜索操作"在 C# 中 2022-01-01
- 全局 ASAX - 获取服务器名称 2022-01-01
- 首先创建代码,多对多,关联表中的附加字段 2022-01-01
- 在 VS2010 中的 Post Build 事件中将 bin 文件复制到物 2022-01-01
- 是否可以在 asp classic 和 asp.net 之间共享会话状态 2022-01-01
- 经典 Asp 中的 ResolveUrl/Url.Content 等效项 2022-01-01
- 将事件 TextChanged 分配给表单中的所有文本框 2022-01-01