代码之家  ›  专栏  ›  技术社区  ›  Stilgar

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

  •  1
  • Stilgar  · 技术社区  · 15 年前

    我可能需要想象一个B样条曲线( http://en.wikipedia.org/wiki/B-spline )在.NET中。我不知道从哪里开始。有什么简单的方法或图书馆吗?我更喜欢在Silverlight中这样做,但是WPF和Win表单也可以。我把软件想象成一个坐标系,其中有一些控制点可以添加、删除或移动,从而重新绘制样条曲线。请注意,我缺乏数学背景。我在gdi+中发现了一些方法,它们似乎是用来绘制样条曲线的,但我不确定这些方法是否是B样条曲线。

    任何建议都将不胜感激。欢迎提供图书馆、代码、指南链接或一般建议。

    2 回复  |  直到 12 年前
        1
  •  1
  •   Steve    15 年前

    很久以前,我为一些使用样条曲线的科学代码编写了一个非常快速的程序。特别是,这些样条线是非均匀有理基样条线。这是样条曲线最普遍的形式。所有其他样条线都是这种类型的特殊情况。采用节点向量生成样条曲线,采用递归Cox-de-Boor算法计算点的值。C代码非常糟糕,这是我迅速拼凑起来解决问题的东西,在我成为一个更优秀的开发人员之前。如果你用google搜索cox de boor,你会发现很多页面讨论样条曲线的理论基础。注意,它们中的大多数都有某种错误(在讨论结向量时有一些错误)。

    http://stochfit.svn.sourceforge.net/viewvc/stochfit/trunk/NURBs/

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

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

        2
  •  1
  •   Henk Holterman    15 年前

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