【问题标题】: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不是曲线的一部分,而是“控制点”,移动一下看看效果。

    【讨论】:

    • 我需要创建一个可视化来演示移动控制点如何影响曲线。它用于演示目的。阅读维基百科,我看到 B 样条曲线使用了一种叫做结的东西。与控制点不同,节点不属于曲线。 Graphics 方法没有任何参数或任何称为结的东西,但有一些称为张力的东西,因此结可能以某种方式确定张力。我需要创建类似这张图片的交互式版本:77.77.167.148/Education/manev/CompGeom/Upr/Upr5_files/hull.gif
    • 这不仅仅是一个家庭作业。我不知道我必须标记它抱歉
    猜你喜欢
    • 2018-09-25
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多