Подробно на https://cgraph.ru/node/252
Разработка NURBS (Неоднородный рациональный β-сплайн, NURBS (англ. Non-uniform rational β-spline, читается «нурбс»)) началась в 1950-х годах инженерами, которым требовалось математически точное представление поверхностей произвольной формы (таких как корпуса кораблей, самолётов, космических аппаратов и автомобилей) с возможностью точного копирования и воспроизведения всякий раз, когда это нужно. До появления представлений такого рода дизайнер создавал единичную физическую (материальную) модель, которая и служила эталоном.
Пионером в этих исследованиях были французы Пьер Безье, инженер из компании Рено, и Пол де Кастелье, сотрудник компании Ситроен; работали они независимо друг от друга в одно и то же время. Однако, поскольку Безье опубликовал результаты своей работы, большинство знакомых с компьютерной графикой знают о сплайнах — кривых, преставимых контрольными точками, — по сплайнам Безье; в то время как имя де Кастелье упоминается только рядом с алгоритмами, которые он изобрёл для вычисления параметрических поверхностей. В 1960-х было установлено, что неравномерные рациональные β-сплайны являются обобщением сплайнов Безье, которые могут быть определены как равномерные рациональные β-сплайны.
Поначалу NURBS использовались только в коммерческих CAD-системах для автомобильных компаний. Позднее они стали неотъемлемой частью стандартных пакетов программ для компьютерной графики.
Интерактивная отрисовка кривых и поверхностей NURBS в реальном времени стала впервые доступна на рабочих станциях Silicon Graphics в 1989 году.
Любой более или менее сложный чертеж состоит не только из отрезков прямых линий, окружностей и их дуг, но также и из набора кривых линий. Гладкие кривые удобно строить при помощи метода сглаживания кривой типа β-сплайна. β-сплайн — это гладкая кривая или, точнее, кривая с непрерывными старшими производными до n-ой, где n — порядок сплайна. Заметим, что линия, составленная из β-сплайнов, не будет проходить точно через заданные точки. Подобную кривую составляют из дуг полиномов третьей степени, так как такой полином обеспечивает необходимую непрерывность. Построение линии происходит с помощью итерационной процедуры.
x(t) = ((a3t + a2)t + a1)t + a0, для 0 <= t <= 1
y(t) = ((b3t + b2)t + b1)t + b0, для 0 <= t <= 1
a3 = (-xi-1 + 3xi - 3xi+1 + xi+2)/6
a2 = (xi-1 - 2xi + xi+1)/2
a1 = (-xi-1 + xi+1)/2
a0 = (xi-1 + 4xi+ xi+1)/6
b3 = (-yi-11 + 3yi - 3yi+1 + yi+2)/6
b2 = (yi-1 - 2yi + yi+1)/2
b1 = (-yi-1 + yi+1)/2
b0 = (yi-1 + 4yi+ yi+1)/6