Уроки, алгоритмы, программы, примеры

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

У меня проблема вот с этим: gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);. Вылезает ошибка: CS1061 "object" не содержит определения "GL_COLOR_BUFFER_BIT", и не удалось найти доступный метод расширения "GL_COLOR_BUFFER_BIT",...
Большое спасибо. Единственный код который прошел без каких либо ошибок. Ура!!!
Скажите пожалуйста, подскажите алгоритм по которому по заданным точкам можно определить тип многогранника, скажем это куб или прямоугольный параллелепипед. Нашел теорию по этим фигурам: https://www.mat... https://www.mat... Акцентировать внимание...
Всем у кого не работает. файл wizard.script Ещё одно упоминание Glut32 в строке "if (!VerifyLibFile(dir_nomacro_lib, _T("glut32"), _T("GLUT's"))) return false;" меняем на "if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("GLUT's"))) return...
Не получается, емаё

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика

Общая информация
Интерполирование по Эрмиту есть специальный вид многоинтервальной интерполяции, при котором интерполирующий многочлен Hn(х) обеспечивает не только равенство Hn(х) значениям f(x), но и совпадение некоторого количества производных в узлах интерполяции.
Многочлен Эрмита единственный, это следует из однозначности его построения.
Остаточный член интерполяционной формулы Эрмита равен:
Rn(x)=f(x)-Hn(x)=f(n+1)(ξ)*(x-x0)N0*...*(x-xm)Nm/(n+1)!, где ξ∈[x0,xm]
Алгоритм построения

Представим себе, что на плоскости в координатах x,y нарисовано несколько точек. Задача соединить их плавной кривой так чтобы в итоге получился график гладкой функции y=ƒ(x).
На каждом отдельном участке между соседними точками это должен быть многочлен третьей степени и при этом соседние многочлены должны каким-то образом гладко
сопрягаться.
Для того, чтобы решить эту задачу, сначала решим частную задачу: представим себе что на отрезке [0;1] у нас задана функция - многочлен третьей степени:ƒ(x)=а0+a1*x+a2*x2+a3*x3
Нам неизвестны коэффициенты a0,a1,a2,a3 и мы хотим определить их по следующим данным:ƒ(0)=y0,ƒ(1)=y1,ƒ' (0)=z0,ƒ'(1)=z1
Производная функции ƒ определяется следующим образом:ƒ'(x)=a1+2*a2*x+3*a3*x2
Запишем наши уравнения:f(0)=a0=y0f'(0)=a1=z0f(1)=a0+a1+a2+a3=y1
f'(1)=a1+2*a2+3*a3=z1

Было бы удобно записать эти уравнения в матричном виде:

Матричное представление системы уравнений

Правая часть системы линейных уравнений, это столбец с координатами y0,z0,y1,z1

столбец известных данных

Вектор-столбец неизвестных переменных обозначим

Вектор-столбец неизвестных переменных

Тогда нам нужно решить систему линейных уравнений P*A=B

В общем случае решением будет: A=P-1*B

Воспользуемся алгоритмом Гаусса:
для этого в левой части таблицы запишем матрицу P, a справа приписывается единичная матрица

решение системы методом Гаусса

Задача привести матрицу некоторыми преобразованиями к такому виду, чтобы слева оказалась единичная матрица, а то что будет в правой половине и будет обратной матрицей

(P│E)→ (E│P-1)

Итак,

обратная матрица

По значениям в концах отрезка [0,1] и их производных, мы восстановили всю функцию

a0=y0
a1=z0
a2=-3*y0-2*z0+3*y1-z1
a3=2*y0+z0-2*y1+z1
ƒ(x)=y0+z0*x+(-3*y0-2*z0+3*y1-z1)*x2+(2*y0+z0-2*y1+z1)*x3

Пусть нужно произвести интерполяцию на отрезке [x0;x1 ], тогда график функции необходимо сдвинуть на x0 и растянуть в x1-x0 раз, а поскольку z0,z1 в x1-x0 раз меньше, чем требуется, то их необходимо домножить.
Для удобства введем k=(x-x0)/(x1-x0) и h=x1-x0. Функция примет вид:

ƒ(k)=y0+z0*h*k+(-3*y0-2*z0*h+3*y1-z1*h)*k2+(2*y0+z0*h-2*y1+z1*h)*k3

Аналогичным образом определяется многочлен любой степени.
При добавлении значений производных (до некоторого порядка m) в точках добавляются дополнительные слагаемые.
Точность растет с увеличением количества известных значений производных в точках.