Типы описаны в perlguts (см. Perl Internals для соответствующей документации) - и AV для массивов и HV для хэшей.
Некоторое время назад я написал очень быструю программу для научного кода, в котором использовались сплайны. В частности, эти сплайны являются NURBS (неоднородными рациональными базисными сплайнами). Это наиболее обобщенная форма сплайна. Все остальные шлицы являются частными случаями этого типа. Узловой вектор используется для создания сплайна, а рекурсивный алгоритм Кокса-де-Бура используется для вычисления значения точки. Код C # очень плохой, я быстро собрал его для решения проблемы и до того, как стал более опытным разработчиком. Если вы погуглите Cox de Boor, вы найдете множество страниц, на которых обсуждаются теоретические основы сплайнов. Остерегайтесь, у большинства из них есть какая-то ошибка (некоторые из них в своем обсуждении вектора узлов)
http://stochfit.svn.sourceforge.net/viewvc/stochfit/trunk/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 не являются частью кривой, а являются «контрольными точками», переместите их, чтобы увидеть эффект.