2009-06-22 9 views
1

Ich muss möglicherweise ein B-Spline (http://en.wikipedia.org/wiki/B-spline) in .NET visualisieren. Ich weiß nicht wo ich anfangen soll. Gibt es einen einfachen Weg oder eine Bibliothek, um es zu tun? Ich würde es lieber in Silverlight tun, aber WPF und Win Forms ist auch in Ordnung. Ich stelle mir die Software als Koordinatensystem mit einigen Kontrollpunkten vor, die Sie hinzufügen, löschen oder verschieben können, wodurch der Spline neu gezeichnet wird. Beachten Sie, dass mir der mathematische Hintergrund fehlt. Ich habe einige Methoden in GDI + gefunden, die zum Zeichnen von Splines gedacht sind, aber ich bin mir nicht sicher, ob es sich um B-Splines handelt.B-Spline in .NET visualisieren

Jeder Rat würde geschätzt werden. Bibliotheken, Code, Links zu Leitfäden oder allgemeine Vorschläge sind willkommen.

Antwort

1

Ich habe vor einiger Zeit ein sehr schnelles Programm für einen wissenschaftlichen Code geschrieben, der Splines verwendet. Insbesondere sind diese Splines NURBS (nicht-einheitliche rationale Basis-Splines). Dies ist die verallgemeinerte Form des Splines. Alle anderen Splines sind Sonderfälle dieses Typs. Der Knotenvektor wird verwendet, um den Spline zu erzeugen, und der rekursive Cox-de-Boor-Algorithmus wird verwendet, um den Wert eines Punkts zu berechnen. Der C# -Code ist sehr schlecht, es war etwas, das ich schnell zusammengeworfen habe, um ein Problem zu lösen, und bevor ich ein besserer Entwickler war. Wenn Sie Google Cox de Boor googlen, finden Sie auf vielen Seiten die theoretische Untermauerung von Splines. Hüten Sie sich vor, die meisten von ihnen irgendeine Art von Fehler haben (einige von ihnen in ihrer Diskussion über den Knotenvektor)

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

ich nicht alle mathematischen Einzelheiten erinnern, aber versuchen, zu helfen, wenn ich weiß, die Antwort. Viel Glück, das war sehr schwieriges Wissen von mir zu erwerben!

EDIT - Ich glaube, Sie von diesen Methoden, um eine B-Spline, wenn man das Gewicht für einen gegebenen Punkt auf 1

+0

Es scheint, als könnte das wirklich hilfreich sein. Ich werde es morgen in Einzelheiten überprüfen. – Stilgar

1

Ein B-Spline ist eine Lösung für ein Problem, vielleicht sollten Sie Ihr Problem beschreiben und fragen, was die beste Lösung ist. GDI + enthält DrawBezier und DrawCurve zum Zeichnen von Splines, was ein guter Anfangspunkt sein könnte. Etwas wie folgt aus:

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 und P3 sind nicht Teil der Kurve, sondern ‚Kontrollpunkte‘, bewegen sie den Effekt zu sehen.

+0

ich gesetzt bin eine Visualisierung zu erstellen, die erforderlich visualy gezeigt, wie Kontrollpunkte Bewegen der Kurve beeinflusst. Es ist für Demozwecke gedacht. Wikipedia lesen Ich sehe die B-Splines verwenden etwas namens Knoten. Im Gegensatz zu den Kontrollpunkten gehören die Knoten nicht zur Kurve. Die Graphics-Methoden haben keine Argumente oder etwas, das Knoten genannt wird, sondern etwas, das Spannung genannt wird, so dass die Knoten wahrscheinlich die Spannung in irgendeiner Weise bestimmen. Ich bin verpflichtet, etwas wie interaktive Version dieses Bildes zu erstellen: http://77.77.167.148/Education/manev/CompGeom/Upr/Upr5_files/hull.gif – Stilgar

+0

Wenn es Hausaufgaben ist dann bitte Tag als solche. –

+0

Es ist mehr als eine Hausaufgabe. Ich wusste nicht, dass ich es entschuldigen musste – Stilgar