Domanda

Potrei aver bisogno di visualizzare una B-Spline ( http://en.wikipedia.org / wiki / B-spline ) in .NET. Non ho da dove cominciare. C'è un modo semplice o una libreria per farlo? Preferirei farlo in Silverlight ma anche WPF e Win Forms vanno bene. Immagino il software come un sistema di coordinate con alcuni punti di controllo che è possibile aggiungere, eliminare o spostare facendo riverniciare la spline. Nota che mi manca lo sfondo matematico. Ho trovato alcuni metodi in GDI + che sembrano destinati al disegno di spline ma non sono sicuro che si tratti di spline B.

Qualsiasi consiglio sarebbe apprezzato. Librerie, codici, link a guide o suggerimenti generali sono i benvenuti.

È stato utile?

Soluzione

Ho scritto un programma molto veloce qualche tempo fa per alcuni codici scientifici che utilizzavano spline. In particolare, queste spline sono NURBS (spline a base razionale non uniforme). Questa è la forma più generalizzata della spline. Tutte le altre spline sono casi speciali di questo tipo. Il vettore del nodo viene utilizzato per generare la spline e l'algoritmo ricorsivo Cox de Boor viene utilizzato per calcolare il valore di un punto. Il codice C # è molto scarso, è stato qualcosa che ho messo insieme rapidamente per risolvere un problema e prima ero uno sviluppatore più raffinato. Se vai su Google Cox de Boor, troverai molte pagine che parlano del fondamento teorico delle spline. Attenzione, molti di loro hanno una sorta di errore (alcuni nella loro discussione sul vettore dei nodi)

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

Non ricordo tutti i dettagli matematici, ma cercherò di aiutarti se conosco la risposta. Buona fortuna, questa era una conoscenza molto difficile da acquisire da parte mia!

MODIFICA - Credo che tu ottenga una B-spline da questi metodi se imposti il ??peso per un dato punto su 1.

Altri suggerimenti

Una B-Spline è una soluzione a un problema, forse dovresti descrivere il tuo problema e chiedere quale sia la soluzione migliore. GDI + contiene DrawBezier e DrawCurve per disegnare spline, che potrebbe essere un buon punto di partenza. Qualcosa del genere:

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 e p3 non fanno parte della curva ma "punti di controllo", spostali per vedere l'effetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top