Расчет производной сплайна из кривых Безье

Программирование на Юнити.

Расчет производной сплайна из кривых Безье

Сообщение c0ol 04 май 2022, 10:35

Приветствую, ребята !

Для определения длины сплайна (состоит из кривых Безье) нужно рассчитать определенный интеграл в интервале [0, 1].

Пробую высокоточную и фундаментальную математику.

Проблема в правильном расчете первой производной в этом коде, поскольку в туторе она нужна просто для визуализации скорости.

Для одиночной кривой Безье расчет верен, проблема в сплайне - как учесть количество кривых ???

В классе Bezier расчет:
Синтаксис:
Используется csharp
public static Vector3 GetFirstDerivative(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t)
  {
    t = Mathf.Clamp01(t);
    float oneMinusT = 1f - t;
    return
      3f * oneMinusT * oneMinusT * (p1 - p0) +
      6f * oneMinusT * t * (p2 - p1) +
      3f * t * t * (p3 - p2);
  }
 


В классе BezierSpline:
Синтаксис:
Используется csharp
public Vector3 GetFirstDerivative(float t)
  {
    int i;
    if (t >= 1f)
    {
      t = 1f;
      i = points.Length - 4;
    }
    else
    {
      t = Mathf.Clamp01(t) * CurveCount;
      i = (int)t;
      t -= i;
      i *= 3;
    }
    return transform.TransformPoint(Bezier.GetFirstDerivative(points[i], points[i + 1], points[i + 2], points[i + 3], t));
  }
 


Вопрос к знатокам сплайнов:
Как правильно в этом куске вычислить 1-ю производную для всего сплайна ?
Последний раз редактировалось c0ol 05 май 2022, 11:56, всего редактировалось 1 раз.
Аватара пользователя
c0ol
UNец
 
Сообщения: 9
Зарегистрирован: 04 май 2022, 00:57

Re: Расчет производной сплайна из кривых Безье

Сообщение 1max1 04 май 2022, 18:23

А вычислить длину кривых по отдельности и сложить нельзя? (не математик).
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Расчет производной сплайна из кривых Безье

Сообщение c0ol 04 май 2022, 19:45

1max1 писал(а):А вычислить длину кривых по отдельности и сложить нельзя? (не математик).


Да, спасибо, конечно можно. Этот вариант есть в багаже.

Робкая надежда, что есть метод...
Аватара пользователя
c0ol
UNец
 
Сообщения: 9
Зарегистрирован: 04 май 2022, 00:57

Re: Расчет производной сплайна из кривых Безье

Сообщение jetyb 19 май 2022, 08:01

Прямо никак не посчитаешь. Математика как всегда в своем общем случае бесполезна.
Если считать по формуле длины кривой, то понадобится вычислить интеграл от квадратного корня из многочлена четвертой степени, что почти и не берется.
Кривая же сама по себе не рисуется, она тут рисуется ломаной из прямых. Значит проще всего считать длину такой ломаной.
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Re: Расчет производной сплайна из кривых Безье

Сообщение c0ol 19 май 2022, 20:18

jetyb писал(а):Прямо никак не посчитаешь. Математика как всегда в своем общем случае бесполезна.
Если считать по формуле длины кривой, то понадобится вычислить интеграл от квадратного корня из многочлена четвертой степени, что почти и не берется.
Кривая же сама по себе не рисуется, она тут рисуется ломаной из прямых. Значит проще всего считать длину такой ломаной.


Спасибо за мнение.

Я ушел от суммы длин магнитуд в область фундаментала. Далее сложил куски кривых для сплайна.
Аватара пользователя
c0ol
UNец
 
Сообщения: 9
Зарегистрирован: 04 май 2022, 00:57


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13