Visualize B-Spline em .NET
-
06-07-2019 - |
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.
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.