Класифікація мультитач жестів
З появою сенсорних екранів розробникам програмного забезпечення довелося переосмислити управління комп'ютером за допомогою жестів пальцями. Одним з основних завдань у розпізнаванні жестів є класифікація дотиків у один з кількох можливих жестів. Це може бути складно, оскільки дотики насправді є плямами пікселів на екрані, а не унікальними точками, і жести включають рух.
Ми визначаємо дотик як з'єднаний набір пікселів. Два пікселі належать до одного дотику, якщо вони горизонтально або вертикально суміжні. Точка дотику — це середнє положення всіх пікселів у наборі.
Захват — це набір усіх точок дотику на зображенні. Точка захвату — це середнє положення всіх точок дотику в захваті. Для кожної точки дотику ми визначаємо її вектор дотику як вектор від точки захвату до точки дотику. Жест — це пара захватів (початковий і кінцевий), і обидва захвати мають однакову кількість дотиків. Існує взаємно однозначна відповідність між дотиками в початковому і кінцевому захваті. Відповідність вибирається так, щоб сума квадратів відстаней між відповідними точками дотику була мінімальною.
Існує три види жестів: панорамування, масштабування та обертання. З кожним видом пов'язана певна відстань. Відстань панорамування вимірюється між двома точками захвату. Розмах захвату — це середня відстань між кожною точкою дотику і точкою захвату. Відстань масштабування — це різниця між двома розмахами захвату. Обертання дотику — це підписаний кут (в (−, ) радіанах) між двома векторами дотику для відповідних точок дотику (який дорівнює нулю, якщо будь-який вектор дотику має нульову довжину). Обертання захвату — це середнє обертання дотику. Відстань обертання — це довжина дуги обертання захвату по колу з радіусом, рівним розмаху захвату початкового захвату.
Вам потрібно класифікувати жести в залежності від того, чи це панорамування, масштабування або обертання. Виберіть той, який має найбільшу пов'язану відстань.
Вхідні дані
Вхідні дані — це одна пара зображень, поданих поруч. Обидва зображення мають розмір 15×30 пікселів, і на кожному рядку буде один пробіл, що розділяє два зображення. Кожне зображення використовує X для позначення пікселів дотику і крапку (.) для позначення відсутності дотику. Обидва зображення мають однакову кількість дотиків, від 1 до 5.
Вихідні дані
Виведіть кількість дотиків і тип жесту (панорамування, масштабування або обертання), а також напрямок жесту для масштабування або обертання. Напрямок для масштабування — вглиб, якщо розмах захвату кінцевого захвату менший, ніж початкового, інакше — назовні. Напрямок обертання — або за годинниковою стрілкою, або проти годинникової стрілки. Усі порівняння відстаней, що впливають на вихідні дані, будуть стійкими до числової похибки 10^{−5}.