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

Вход на сайт

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

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

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

dobryj den, popytalas otkryt prikreplionnyj fail ctoby posmotret kak rabotaet, no mne ego ne pokazyvaet vydajet osibku. Pochemu?
Очень интересно! ии сайт крутой жалко что умирает(
У Вас число превысит максимальное число int. Можно использовать в Вашем случае uint, но лучше все переписать на double.
Добавление к программе строки glutReshapeFunc(changeSize); приводит к тому, что треугольник перестаёт совсем отрисовываться.
Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.

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

Рейтинг@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) в точках добавляются дополнительные слагаемые.
Точность растет с увеличением количества известных значений производных в точках.