Як правильно побудувати гладку криву маючи набір точок

  • Як правильно побудувати гладку криву маючи набір точок
  • Як правильно побудувати гладку криву маючи набір точок
Як правильно побудувати гладку криву маючи набір точок
  • iOS
  • алгоритми
  • Розробка ігор

Завдання наступна: користувач веде пальцем по екрану і слідом за пальцем на екрані повинна відображатися красива гладка крива. Як приклад, можна подивитися як працює програма для ipad penultimate. Там виходять дуже красиві лінії.

Сейча я строю криву із сегментів, що представляють собою кубічні криві Безьє. Пробував різні варіанти. Поки кращий результат дали два способи:

1) сегметов будуються між кожної пари точок, отриманих від користувача (між першим і другим, потім між другою і третьою і т.д.). Відсутні точки приблизно розраховую математично.

Точки вважаю так:

Pi '= (Pi + 1 - Pi-1) / a (for i = 2..n-1)

де Pi - точка отримана від користувача, а B1i і B2i - шукані точки.


Підсумок: крива безумовно є, але недостатньо гладка. Або я не вірно розраховую точки, або спосіб не найкращий.


2) Всі чотири точки для сегмента беру з набору, отриманого від користувача. Щоб уникнути гострих кутів між сусідніми сегментами знімаю другу точку поточного сегмента, грунтуючись на положенні третьої точки попереднього (так щоб 3-тя і 4-я точки попереднього сегмента, а також 2-я точка поточного лежали на одній прямій).


Підсумок: чи не краще ніж в першому випадку.


Як зробити щоб крива була більш гладкою, як у penultimate?

Пропоную використовувати гібрид. Виводитися: рівняння кривої, порядок гладкості який вас влаштовує і виводитися рівняння прямої. Близько точок дотику використовуємо перший тип кривої, далеко другий. Регулюємо цей процес за допомогою вагової функції, яка залежить від відстані до найближчої точки:
(1-p®) * f1 (x) + p® * f2 (x). При видалення r - велике, результат f2 (x). При прагнення до точки, результат f1. У проміжку підсумовуємо функції. Вагова функція від 0 до 1.
Залишилося підібрати вагову функцію, яка буде ідеально поєднувати гладкість близько точки і прямолінійність між точками. Даний підхід добре працює для деяких завдань побудови карт.

Ваш відповідь на питання

Увійдіть, щоб написати відповідь

  • Тольятті
  • Повний робочий день
  • від 60 000 до 90 000 руб.
  • Москва
  • Повний робочий день
  • від 40 000 руб.
  • Москва
  • Повний робочий день
  • від 150 000 до 180 000 руб.
  • Москва
  • Повний робочий день
  • від 150 000 до 180 000 руб.

50000 руб. / За проект

50000 руб. / За проект

Увійдіть на сайт

Щоб задати питання та отримати на нього кваліфіковану відповідь.

Схожі статті