2009-06-22 57 views
1

我可能需要在.NET中可視化B樣條線(http://en.wikipedia.org/wiki/B-spline)。我不從哪裏開始。有沒有簡單的方法或圖書館來做到這一點?我寧願在Silverlight中做,但WPF和Win Forms也很好。我將軟件想象成一個帶有一些控制點的座標系,您可以添加,刪除或移動,從而重新繪製樣條曲線。請注意,我缺乏數學背景。我在GDI +中發現了一些似乎用於繪製樣條線的方法,但我不確定它們是否是B樣條線。在.NET中可視化B樣條線

任何意見,將不勝感激。我們歡迎圖書館,代碼,指南鏈接或一般建議。

回答

1

很早以前我寫了一個非常快速的程序,用於使用樣條曲線的一些科學代碼。特別是,這些樣條是NURBS(非均勻有理基礎樣條)。這是樣條的最普遍形式。所有其他樣條都是這種類型的特殊情況。結矢量用於生成樣條,並且遞歸Cox de Boor算法用於計算一個點的值。 C#代碼非常糟糕,這是我在解決問題之前迅速拼湊起來的東西,在我成爲更加優秀的開發人員之前。如果您是谷歌Cox de Boor,您會發現許多討論樣條理論基礎的頁面。當心,大多有某種錯誤的(在他們的結矢量的討論其中的一些)

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

我不記得所有的數學細節,但會盡力幫助,如果我知道答案。祝你好運,這是我很難獲得的知識!

編輯 - 我相信你從這些方法的B樣條,如果你給定點的權重設置爲1。

1

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不是曲線的一部分,而是'控制點',移動它們以查看效果。

+0

我需要創建一個展示visualy如何移動控制點影響曲線的可視化。它用於演示目的。 閱讀維基百科我看到B樣條使用了一種叫做結的東西。與控制點不同,節點不屬於曲線。圖形方法沒有任何參數或任何稱爲結的東西,但有一些稱爲張力的東西,所以可能會以某種方式決定張力。 我需要創建類似以下圖片的互動版本:http://77.77.167.148/Education/manev/CompGeom/Upr/Upr5_files/hull.gif – Stilgar 2009-06-22 17:41:17

+0

如果是家庭作業,請將其標記爲這樣。 – 2009-06-22 18:09:05