Question

Je pourrais avoir besoin de visualiser une B-Spline ( http://en.wikipedia.org / wiki / B-spline ) dans .NET. Je ne sais pas par où commencer. Y a-t-il un moyen facile ou une bibliothèque de le faire? Je préférerais le faire dans Silverlight mais WPF et Win Forms conviennent également. J'imagine le logiciel comme un système de coordonnées avec des points de contrôle que vous pouvez ajouter, supprimer ou déplacer, ce qui provoque la repeinte de la spline. Notez que je manque d'arrière-plan mathématique. J'ai trouvé quelques méthodes dans GDI + qui semblent être conçues pour dessiner des splines, mais je ne suis pas sûr qu'elles soient B-Splines.

Tout conseil serait apprécié. Bibliothèques, codes, liens vers des guides ou suggestions générales sont les bienvenus.

Était-ce utile?

La solution

J'ai écrit un programme très rapide il y a quelque temps pour un code scientifique utilisant des splines. En particulier, ces splines sont des NURBS (splines de base rationnelles non uniformes). C'est la forme la plus généralisée de la spline. Toutes les autres splines sont des cas spéciaux de ce type. Le vecteur noeud est utilisé pour générer la spline, et l'algorithme récursif de Cox de Boor est utilisé pour calculer la valeur d'un point. Le code C # est très médiocre, c’est quelque chose que j’ai jeté rapidement pour résoudre un problème et que j’étais auparavant un développeur plus abouti. Si vous recherchez Google Cox de Boor, vous trouverez de nombreuses pages traitant des fondements théoriques des splines. Attention, la plupart d’entre eux ont une sorte d’erreur (certains d’entre eux dans leur discussion du vecteur noeud)

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

Je ne me souviens pas de tous les détails mathématiques, mais je vais essayer de vous aider si je connais la réponse. Bonne chance, c'était une connaissance très difficile à acquérir de ma part!

EDIT - Je pense que vous obtenez une B-spline de ces méthodes si vous définissez le poids pour un point donné sur 1.

Autres conseils

Un B-Spline est une solution à un problème. Vous devriez peut-être décrire votre problème et demander quelle est la meilleure solution. GDI + contient DrawBezier et DrawCurve pour dessiner des splines, ce qui peut être un bon point de départ. Quelque chose comme ça:

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 et p3 ne font pas partie de la courbe, mais des "points de contrôle", déplacez-les pour voir l'effet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top