Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Curves.doc
Скачиваний:
52
Добавлен:
01.09.2019
Размер:
4.51 Mб
Скачать

Глобальная Интерполяция Поверхностей

Путсь у нас есть m+1 рядов и n+1 столбцов исходных точек dij (0 <= i <= m и 0 <= j <= n) и нужно найти поверхность B-spline степени (p,q), содержащую все из них. Аналогично случаю кривых, имеем исходные точки и степени p и q в качетстве исходных данных. Чтобы определить кривую B-spline, нам нужно два узловых вектора U и V, по одному на каждое направление, и набор контр. точек. Как и в случае с кривыми, количества контрольных и исходных точек равны (т.e. (m+1)×(n+1) контр. точек в m+1 рядах и n+1 столбцах). С помощью метода, обсуждавшегося в Параметрах и Узловых Векторах для Поверхностей, мы можем вычислить два набора параметров: sc (0 <= c <= m) в направлении u и td (0 <= d <= n) в направлении v, устанавливая e и f в m и n, соответственно. Мы также получим узловые векторы U и V соответственно для направлений u и v. Таким образом, все, что остается сделать - это найти нужные контр. точки!

Поиск Решения

Теперь нам нужно найти интерполированную поверхность B-spline степени (p,q). Так как у нас есть узловые векторы, параметры, степени и исходные точки, то единственная недостающая часть - это (m+1)×(n+1) контр. точек.

Пусть дана такая поверхность B-spline:

Так как она содержит все исходные точки и так как параметры sc и td соответствуют исходной точке dcd, то, подставив u=sc и v=td в уравнение поверхности, получим:

Так как Ni,p(sc) не зависит от индекса j, то можно вынести этот член из суммирования по j:

Если рассмотреть внутреннее выражение, то видно, что индекс i есть только в pij. Таким образом, можно взять для удобства новое обозначение:

Говоря точнее, если i фиксирована в одном и том же значении, то qid - это точка, вычисленная для td, на кривой B-spline степени q, определенной по n+1 "неизвестным" контр. точкам i-го ряда из p (т.e. pi0, pi1, ..., pin). Подставляя qid в вышеуказанное уравнение dcd, получим

Таким образом, исходная точка dcd - это точка, вычисленная для sc, кривой B-spline степени p, определенной по m+1 "неизвестным" контр. точкам столбца d из q (т.e., q0d, q0d, ..., qmd). Повторяя это для каждого c (0 <= c <= m), получим d-й столбец исходных точек (т.e. d0d, d1d, ..., dmd) из d-го столбца q (т.e. q0d, q1d, ..., qmd) и параметров s0, s1, ..., sm. Так как исходные точки d0d, d1d, ..., dmd, степень p и параметры s0, s1, ..., sm известны, то это уравнение обозначает

Найти d-й столбец контр. точек q0d, q1d, ..., qmd по данным: степени p, параметрам s0, s1, ..., sm и d-му столбцу исходных точек.

Получается, это задача интерполяции кривой! То есть, можно применить глобальную интерполяцию кривой к каждому столбцу исходных точек, чтобы получить столбцы контр. точек qcd. Так как имеется n+1 столбцов исходных точек, то получим n+1 столбцов q.

Теперь, мы можем использовать ту же самую идею, но применять ее к уравнению qid, которое показано еще раз ниже. В этом уравнении, исходные точки ряда i из q (т.e. qi0, qi1, ..., qin)- это точки на кривой B-spline, вычисленные для t0, t1, ..., tn, степени q, определенной по n+1 неизвестным контр. точкам pi0, pi1, ..., pin. Таким образом, применяя интерполяцию кривой со степенью q и параметрами t0, t1, ..., tn к ряду i из q, получим i ряд искомых контр. точек!

Когда найдем все ряды контр. точек, то эти контр. точки, вместе с двумя узловыми векторами и степенями p и q, определят интерполированную поверхность B-spline степени (p,q) для данных исходных точек. Таким образом, интерполяция поверхности B-spline состоит из (m+1) + (n+1) интерполяций кривой! Вот обобщение всех необходимых шагов:

Вход: (m+1)×(n+1) исходных точек dij и степень (p,q); Выход: Поверхность B-spline степени (p,q), содержащая все исходные точки; Алгоритм:

Вычисляем параметры в направлении u s0, s1, ..., sm и узловой вектор U; Вычисляем параметры в направлении v t0, t1, ..., tn и узловой вектор V; for d := 0 to n do /* для столбца d */

begin /* вычисляем "промежуточные исходные точки" q */

Применяем интерполяцию кривой к столбцу d исходных точек (т.e. d0d, d1d, ... dmd), используя

        • степень p

        • параметры s0, s1, ..., sm

        • узловой вектор U

Результат - столбец d "промежуточных исходных точек" q0d, q1d, ..., qmd

end

for c := 0 to m do /* для ряда c */

begin /* вычисляем искомые контр. точки p */

Применяем интерполяцию кривой к ряду c из q (т.e., qc0, qc1, ... qcn), используя

        • степень q

        • параметры t0, t1, ..., tn

        • узловой вектор V

Результат - ряд c искомых контр. точек pc0, pc1, ..., pcn

end

Найденные (m+1)×(n+1) контр. точек pij, степень (p,q) и узловые векторы U и V определяют интерполированную поверхность B-spline степени (p,q) для данных исходных точек.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]