멀티터치 제스처 분류

아직 제출이 없습니다시간 제한2초메모리 제한256 MB

문제

터치스크린이 나오면서 소프트웨어 설계자는 손가락 제스처에 맞춰 조작 방식을 다시 만들어야 했다. 제스처를 해석하는 첫 단계는 그 제스처가 어떤 종류인지 분류하는 것이다. 손가락은 정확한 한 점이 아니라 픽셀 덩어리를 남기고 제스처에는 움직임이 섞여 있어서, 이 분류가 생각보다 어렵다.

터치는 서로 이어진 픽셀 집합이다. 두 픽셀이 가로나 세로로 맞닿아 있으면 같은 터치에 속한다. 터치의 터치점은 그 집합에 속한 모든 픽셀 위치의 평균이다.

그립은 한 이미지에 있는 모든 터치점의 집합이다. 그립점은 그립에 속한 모든 터치점 위치의 평균이다. 터치점의 터치 벡터는 그립점에서 그 터치점으로 향하는 벡터다.

제스처는 처음 그립과 나중 그립의 쌍이고, 두 그립의 터치 개수는 같다. 두 그립의 터치는 일대일로 대응시킨다. 가능한 대응 중에서 대응된 터치점 사이 거리의 제곱합이 최소가 되는 대응을 쓴다.

제스처의 종류는 이동(pan), 줌(zoom), 회전(rotation) 셋이고, 종류마다 거리가 정의된다.

  • 이동 거리는 두 그립점 사이의 거리다.
  • 그립 퍼짐은 각 터치점과 그립점 사이 거리의 평균이다.
  • 줌 거리는 두 그립 퍼짐의 차의 절댓값이다.
  • 대응된 터치점의 터치 회전은 처음 터치 벡터에서 나중 터치 벡터까지의 부호 있는 각이고, 범위는 (π,π)(-\pi, \pi) 라디안이다. 두 터치 벡터 중 하나라도 길이가 0이면 터치 회전은 0이다.
  • 그립 회전은 터치 회전의 평균이다.
  • 회전 거리는 처음 그립의 그립 퍼짐을 반지름으로 하는 원에서 그립 회전이 그리는 호의 길이다.

거리가 가장 큰 종류로 제스처를 분류한다.

입력

이미지 두 장이 나란히 주어진다. 두 이미지 모두 15행 30열이다. 15개의 각 줄에는 처음 이미지의 픽셀 30개, 공백 한 칸, 나중 이미지의 픽셀 30개가 차례로 있다. 터치에 속한 픽셀은 X, 속하지 않은 픽셀은 마침표(.)로 나타낸다. 두 이미지의 터치 개수는 같고, 1개 이상 5개 이하다.

출력

터치 개수와 제스처 종류를 한 줄에 공백 한 칸으로 구분해 출력한다. 종류는 pan, zoom, rotate 중 하나다.

줌이면 종류 뒤에 방향도 출력한다. 나중 그립의 그립 퍼짐이 처음 그립의 그립 퍼짐보다 작으면 in, 그렇지 않으면 out이다. 회전이면 종류 뒤에 clockwise 또는 counter-clockwise를 출력한다. 방향은 화면에 보이는 대로 정하고, 이미지의 첫 줄이 위쪽이다.

답을 결정하는 모든 거리 비교는 10510^{-5}의 수치 오차에 대해 안전하다.