本文介绍了用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#实现基数曲线的插补的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!