Рисуя B-сплинаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Рисуя B-сплина

Сообщение Anonymous »

Из статьи Википедии: < /p>

В математическом подполе численного анализа алгоритм De Boor
является полиномиальным временем и численным стабильным алгоритмом для
, оценивающего кривые сплайн в форме b-spline. Это обобщение алгоритма
de Casteljau для кривых Bézier. Алгоритм был разработан
немецко-американским математиком Карлом Р. де Буром. Упрощенный,
потенциально более быстрые варианты алгоритма De Boor были созданы
, но они страдают от сравнительно более низкой стабильности.

Код: Выделить всё

def deBoor(k: int, x: int, t, c, p: int):
"""Evaluates S(x).

Arguments
---------
k: Index of knot interval that contains x.
x: Position.
t: Array of knot positions, needs to be padded as described above.
c: Array of control points.
p: Degree of B-spline.
"""
d = [c[j + k - p] for j in range(0, p + 1)]

for r in range(1, p + 1):
for j in range(p, r - 1, -1):
alpha = (x - t[j + k - p]) / (t[j + 1 + k - r] - t[j + k - p])
d[j] = (1.0 - alpha) * d[j - 1] + alpha * d[j]

return d[p]
У меня есть эта проблема: она выглядит так, как массив C выходит за пределы первой строки кода

Код: Выделить всё

    d = [c[j + k - p] for j in range(0, p + 1)]
При генерации первой точки первая цикл через диапазон (0, P + 1) для сплайна 3 -й степени

Код: Выделить всё

    j = 0;
k = 0;
p = 3;
so d [0] будет установлен в C [-3]
Вопрос: Как предотвратить попытки доступа к негативным индексам C ? Результаты выглядят нормально, но может ли это быть правильно?

Код: Выделить всё

alpha = (x - t[j + k - p]) / (t[j + 1 + k - r] - t[j + k - p])
не должно быть проверки, чтобы предотвратить разделение на ноль?

Подробнее здесь: https://stackoverflow.com/questions/793 ... a-b-spline
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»