【问题标题】:Visualize B-Spline in .NET在 .NET 中可视化 B 样条
【发布时间】:2012-10-22 19:08:13
【问题描述】:
我可能需要在 .NET 中可视化 B 样条 (http://en.wikipedia.org/wiki/B-spline)。我不知道从哪里开始。有没有简单的方法或图书馆来做到这一点?我更喜欢在 Silverlight 中执行此操作,但 WPF 和 Win Forms 也可以。我将软件想象成一个坐标系统,其中包含一些控制点,您可以添加、删除或移动这些控制点,从而重新绘制样条线。请注意,我缺乏数学背景。我在 GDI+ 中发现了一些似乎用于绘制样条曲线的方法,但我不确定这些是否是 B 样条曲线。
任何建议将不胜感激。欢迎提供库、代码、指南链接或一般性建议。
【问题讨论】:
标签:
.net
winforms
silverlight
spline
【解决方案1】:
不久前,我为一些使用样条的科学代码编写了一个非常快速的程序。特别是,这些样条是 NURBS(非均匀有理基础样条)。这是样条曲线最通用的形式。所有其他样条曲线都是这种类型的特例。节点向量用于生成样条,递归 Cox de Boor 算法用于计算一个点的值。 C# 代码非常糟糕,这是我在成为一名更优秀的开发人员之前快速拼凑起来解决问题的东西。如果你用谷歌搜索 Cox de Boor,你会发现很多页面都在讨论样条曲线的理论基础。当心,他们中的大多数都有某种错误(其中一些在他们对节点向量的讨论中)
http://stochfit.svn.sourceforge.net/viewvc/stochfit/trunk/NURBs/
我不记得所有的数学细节,但如果我知道答案会尽力提供帮助。祝你好运,这对我来说是很难获得的知识!
编辑 - 如果您将给定点的权重设置为 1,我相信您会从这些方法中获得 B 样条。
【解决方案2】:
B 样条是解决问题的方法,也许您应该描述您的问题并询问最佳解决方案是什么。 GDI+ 包含用于绘制样条线的 DrawBezier 和 DrawCurve,这可能是一个很好的起点。像这样的:
Point p1 = new Point(10, 10);
Point p2 = new Point(50, 10);
Point p3 = new Point(10, 50);
Point p4 = new Point(50, 50);
e.Graphics.DrawBezier(Pens.Blue, p1, p2, p3, p4);
p2和p3不是曲线的一部分,而是“控制点”,移动一下看看效果。