2009-06-22 2 views
1

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

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

ответ

1

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

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

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

EDIT - Я считаю, что вы получите B-сплайн из этих методов, если вы установите вес для данной точки 1.

+0

Кажется, что это может быть очень полезно. Завтра я уточню подробности. – Stilgar

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

+0

Я обязан создать визуализацию, которая продемонстрировала visualy как перемещение контрольных точек влияет на кривую. Он предназначен для демонстрационных целей. Чтение Википедии Я вижу, что B-сплайны используют что-то называемое узлами. В отличие от контрольных точек узлы не относятся к кривой. Методы Графика не имеют никаких аргументов или чего-либо, называемого узлами, но имеют что-то, называемое напряжением, поэтому, вероятно, узлы каким-то образом определяют натяжение. Я должен создать что-то похожее на интерактивную версию этой картины: http://77.77.167.148/Education/manev/CompGeom/Upr/Upr5_files/hull.gif – Stilgar

+0

Если это домашняя работа, пожалуйста, пометьте его как таковой. –

+0

Это больше, чем домашнее задание. Я не знал, что мне нужно было отметить его. – Stilgar