Pergunta

eu poderia precisar de visualizar um B-Spline ( http://en.wikipedia.org / wiki / B-spline ) em .NET. Eu não por onde começar. Existe alguma maneira fácil ou biblioteca para fazê-lo? Eu preferiria fazê-lo em Silverlight, mas WPF e Win Forms também é bom. Eu imagino que o software como um sistema de coordenadas com alguns pontos de controle que você pode adicionar, excluir ou mover ao redor fazendo com que a ranhura para ser redesenhada. Note que eu não têm a formação matemática. Eu encontrei alguns métodos em GDI + que parecem ser destinado para desenhar splines mas eu não tenho certeza se estes são B-Splines.

Qualquer conselho seria apreciado. Bibliotecas, código, links para guias ou sugestões gerais são bem-vindos.

Foi útil?

Solução

Eu escrevi um programa muito rápido bastante algum tempo atrás para algum código científica de que as estrias utilizados. Em particular, estas ranhuras são NURBS (estrias racionais base não-uniforme). Esta é a forma mais generalizada da spline. Todas as outras estrias são casos especiais deste tipo. O vector de nó é usado para gerar a ranhura, e a recursiva de Cox Boor algoritmo é utilizado para calcular o valor de um ponto. O código C # é muito pobre, era algo que eu joguei junto rapidamente para resolver um problema e antes que eu era um desenvolvedor mais polido. Se você google Cox de Boor, você vai encontrar muitas páginas que discutem a base teórica de estrias. Cuidado, a maioria deles tem algum tipo de erro (alguns deles em sua discussão sobre o vetor de nó)

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

Não me lembro de todos os detalhes matemáticos, mas vai tentar ajudar se eu sei a resposta. Boa sorte, este foi um conhecimento muito difícil de adquirir em minha parte!

EDIT -. Eu acredito que você conseguir um B-spline a partir desses métodos se você definir o peso para um determinado ponto para 1

Outras dicas

A B-Spline é uma solução para um problema, talvez você deve descrever o problema e perguntar o que a melhor solução é. GDI + contém DrawBezier e DrawCurve para estrias desenho, que poderia ser um bom ponto para começar. Algo parecido com isto:

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 não fazem parte da curva, mas 'pontos de controle', movê-los para ver o efeito.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top