Russian Qt Forum
Ноябрь 26, 2024, 05:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: Поиск готового решения  (Прочитано 28384 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #30 : Июнь 29, 2018, 15:55 »

Попробовал решить задачу.

Пришел к выводу, что не понимаю откуда "ноги растут" в выражении - откуда оно берется и какой смысл несёт.

c3 * t^3 + c2 * t^2 + c1 * t = user_T

и почему

q1 = W1 / 3
q2 = 1 - W2 / 3
c1 = 3.0 * q1;
c2 = 3.0 * (-2.0 * q1 + q2);
c3 = 1 + 3.0 * (q1 - q2);

Подставляя разные значения вместо W1 и W2 получаем практически произвольные кривые для нахождения t, причем не из какого-то фиксированного диапазона [0,1] (см.аттач).

Вопрос 1 - что это и как конкретно с этим работают?
Да, это место действительно мозголомное Улыбающийся "Чего хочет юзер" - см аттач. Это "значение одной из компонент от ВРЕМЕНИ"  (не кривая на плоскости). Синие вектора - это скорости (точнее тангенсы углов касательных). А вот длины этих векторов - веса. Формулы для коэффициентов "с" я просто передрал. Предполагаю что выводятся они так:  в ур-е кривой подставляются новые управляющие точки

P1' = P0 + (P1 - P0) * W1
P2' = P3 - (P3 - P2) * W2

И берется производная ф-ции  bezier(func(user_T))  по user_T. При этом производные func(user_T) по user_T в крайних точках известны - они те же самые что для W1 = W2 = 1. (скорости там какими были такими и остались при любых W1 и W2). Если всю эту бадягу расписать - то получим коэффициенты  "c" зависящие только от W1 и W2 (ну это я так думаю)

Вопрос 2 - может мы вообще имеем дело с рациональными сплайнами Безье? Там веса имеют вполне определенный смысл.
http://edu.alnam.ru/book_cpsp.php?id=47
Точно НЕТ, я сначала тоже клюнул на это взвешивание, долго бился - ну не работает оно как надо! Ключевой момент/соображение - веса W1 и W2 НЕ меняют скоростей в крайних точках
« Последнее редактирование: Июнь 29, 2018, 15:58 от Igors » Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #31 : Июнь 29, 2018, 16:54 »

Да, это место действительно мозголомное Улыбающийся "Чего хочет юзер" - см аттач. Это "значение одной из компонент от ВРЕМЕНИ"  (не кривая на плоскости). Синие вектора - это скорости (точнее тангенсы углов касательных). А вот длины этих векторов - веса.

В этом самом c3 * t^3 + c2 * t^2 + c1 * t = user_T вся суть. Иначе следует параметризовать по времени и принять веса равными 1, так как других условий не вводится.

Отмечаю также, то что представлено на рисунке выглядит не как

bezier(t) = P0 * b0(t) + (P0 + (P1 -  P0) * W1) * b1(t) + (P3 - (P3 - P2) * W2) * b2(t) + P3 * b3(t)

а как (см.аттач)

bezier(t) = P0 * b0(t) + (P0 + (P1 -  P0) * 3 * W1) * b1(t) + (P3 - (P3 - P2) * 3 * W2) * b2(t) + P3 * b3(t)

Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #32 : Июнь 30, 2018, 05:03 »

Отмечаю также, то что представлено на рисунке выглядит не как

bezier(t) = P0 * b0(t) + (P0 + (P1 -  P0) * W1) * b1(t) + (P3 - (P3 - P2) * W2) * b2(t) + P3 * b3(t)

а как (см.аттач)

bezier(t) = P0 * b0(t) + (P0 + (P1 -  P0) * 3 * W1) * b1(t) + (P3 - (P3 - P2) * 3 * W2) * b2(t) + P3 * b3(t)
Это уже дела UI. Показывать юзверю сами управляющие точки неудобно, поэтому рисуется вектор скорости заданной/фиксированной длины (в пикселях) что соответствует W = 1. Заметим что W1 и W2 не могут быть сколь угодно велики т.к. кривая перехлестнется. Строго говоря корректные значения W1 + W2 <= 3 
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.066 секунд. Запросов: 23.