- 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 руб. / За проект
Увійдіть на сайт
Щоб задати питання та отримати на нього кваліфіковану відповідь.