Вопрос

Мне может понадобиться визуализировать B-сплайн ( http://en.wikipedia.org / wiki / B-spline ) в .NET. Я не с чего начать. Есть ли простой способ или библиотека, чтобы сделать это? Я бы предпочел сделать это в Silverlight, но WPF и Win Forms тоже подойдут. Я представляю программное обеспечение как систему координат с некоторыми контрольными точками, которые вы можете добавлять, удалять или перемещать, вызывая перекрашивание сплайна. Обратите внимание, что мне не хватает математического фона. В GDI + я нашел несколько методов, которые, похоже, предназначены для рисования сплайнов, но я не уверен, что это B-сплайны.

Любой совет будет оценен. Библиотеки, код, ссылки на руководства или общие предложения приветствуются.

Это было полезно?

Решение

Недавно я написал очень быструю программу для научного кода, в котором использовались сплайны. В частности, эти сплайны являются NURBS (неоднородными рациональными базисными сплайнами). Это наиболее обобщенная форма сплайна. Все остальные сплайны являются частными случаями этого типа. Вектор узла используется для генерации сплайна, а рекурсивный алгоритм Кокса де Бур - для расчета значения точки. Код на C # очень плох, это было то, что я быстро собрал, чтобы решить проблему, и до того, как я стал более отточенным разработчиком. Если вы воспользуетесь Google Cox de Boor, вы найдете много страниц, на которых обсуждается теоретическая основа сплайнов. Осторожно, большинство из них имеют какую-то ошибку (некоторые обсуждают вектор узлов)

http://stochfit.svn.sourceforge.net/viewvc/ stochfit / багажник / NURBS /

Я не помню все математические детали, но постараюсь помочь, если знаю ответ. Удачи, это было очень трудное знание с моей стороны!

РЕДАКТИРОВАТЬ - Я полагаю, что вы получите B-сплайн из этих методов, если вы установите вес для данной точки на 1.

Другие советы

B-Spline - это решение проблемы, возможно, вам следует описать свою проблему и спросить, какое решение лучше. GDI + содержит DrawBezier и DrawCurve для рисования сплайнов, которые могут быть хорошей отправной точкой. Примерно так:

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 и p3 не являются частью кривой, а являются «контрольными точками», переместите их, чтобы увидеть эффект.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top