在.NET中可视化B样条曲线

在.NET中可视化B样条曲线,.net,winforms,silverlight,spline,.net,Winforms,Silverlight,Spline,我可能需要在.NET中可视化B样条曲线()。我不知道从哪里开始。有什么简单的方法或图书馆可以做到这一点吗?我更喜欢在Silverlight做,但是WPF和Win的形式也不错。我将软件想象成一个坐标系,其中包含一些控制点,可以添加、删除或移动这些控制点,从而重新绘制样条曲线。请注意,我缺乏数学背景。我在GDI+中找到了一些似乎用于绘制样条曲线的方法,但我不确定这些方法是否是B样条曲线 如有任何建议,将不胜感激。欢迎使用库、代码、指南链接或一般建议。B样条曲线是问题的解决方案,也许您应该描述您的问题

我可能需要在.NET中可视化B样条曲线()。我不知道从哪里开始。有什么简单的方法或图书馆可以做到这一点吗?我更喜欢在Silverlight做,但是WPF和Win的形式也不错。我将软件想象成一个坐标系,其中包含一些控制点,可以添加、删除或移动这些控制点,从而重新绘制样条曲线。请注意,我缺乏数学背景。我在GDI+中找到了一些似乎用于绘制样条曲线的方法,但我不确定这些方法是否是B样条曲线


如有任何建议,将不胜感激。欢迎使用库、代码、指南链接或一般建议。

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不是曲线的一部分,而是“控制点”,移动它们以查看效果。

我不久前为一些使用样条线的科学代码编写了一个非常快速的程序。特别是,这些样条曲线是NURBS(非均匀有理基样条曲线)。这是样条曲线的最广义形式。所有其他样条曲线都是这种类型的特例。节点向量用于生成样条曲线,递归Cox-de-Boor算法用于计算点的值。C#代码非常糟糕,在我成为一名更加出色的开发人员之前,我很快就把它拼凑起来解决了一个问题。如果你在谷歌上搜索Cox de Boor,你会发现许多页面讨论样条曲线的理论基础。注意,他们中的大多数人都有某种错误(其中一些人在讨论结向量时)

我不记得所有的数学细节,但如果我知道答案,我会尽力帮助你。祝你好运,这对我来说是很难获得的知识


编辑-如果将给定点的权重设置为1,我相信可以从这些方法中获得B样条曲线。

我需要创建一个可视化,以可视化方式演示移动控制点如何影响曲线。它用于演示目的。阅读维基百科,我看到B样条曲线使用了一种叫做结的东西。与控制点不同,结不属于曲线。图形方法没有任何参数或任何称为结的东西,但有一种称为张力的东西,因此结可能以某种方式确定张力。我被要求为这张图片创建一个类似于交互式的版本:它不仅仅是一个家庭作业。我不知道我必须给它贴上标签,很抱歉,这看起来真的很有帮助。我明天会详细检查一下。