Задача A. Earth VR

Автор:Dmitriy Merzlyakov   Ограничение времени:1 сек
Входной файл:input.txt   Ограничение памяти:512 Мб
Выходной файл:output.txt  
Максимальный балл:100  

Условие

Юный программист Вася работает над своим новым проектом в виртуальной реальности на Unity – он создаёт виртуальную копию нашей планеты в масштабе 1:1. Пока готово несколько небольших отдельных локаций, на которых он разметил схематичные здания, дороги, а также спроецировал изображение со спутника на поверхность. Поверхность каждой локации плоская, и направление севера совпадает с направлением оси Z в координатах Unity.

Вася планирует сделать проект многопользовательским и уже тестирует систему подключения игроков к виртуальному миру. Он хочет, чтобы пользователь сначала выбрал на карте своё местоположение, которое соответствует географическим координатам (φ,ψ), после чего тот появится на игровой сцене в координатах (x,0,z), которые соответствуют выбранному местоположению.

Допустим, первый игрок уже подключился и находится на сцене в координатах (x1, 0, z1), Положению первого игрока на сцене соответствует географическим координатам 1, ψ1). Второй пользователь выбрал на карте географические координаты 22). Помогите Васе разместить игрока на позиции в локации, которая бы соответствовала его географическим координатам.

Вася подготовил сцену и написал несколько вспомогательных скриптов, вам осталось лишь реализовать функцию SpawnCoordinates() типа Vector2 в классе Solution. Эта функция будет вызываться на старте программы, возвращать значение (x2,z2), и с её помощью Вася присвоит модели второго игрока его игровые координаты (x2, 0,z2).

Весь ваш код должен находится в классе Solution. Другие изменения в сцене учитываться не будут. Объект manager предоставляет следующие функции для работы с входными данными:

Проект доступен по этой ссылке: https://github.com/Collider24/Earth-VR, Вам осталось реализовать класс Solution. Доступно две локации для отладки вашего решения – кампус ДВФУ на острове Русский и Красная площадь в Москве. Модели локаций были получены с помощью OpenStreetMap. Решение будет проверяться на бóльшем количестве локаций, расположенных в разных частях мира.

Для тестирования своего решения вы можете изменять данные, находящиеся в файле input.txt в корне папки с проектом.

Процедура тестирования осуществляется следующим образом: выберете сцену с одной из двух локаций и откройте её. Разместите объект Test Player в произвольной точке на игровой модели, и запишите в input.txt два числа через пробел x1, z1 - компоненты позиции игрока. Далее, с помощью любого картографического сервиса найдите выбранную вами точку на карте и скопируйте её географические координаты – запишите их во вторую строку через пробел без запятой (сначала широту, затем долготу). Выберете на карте любую другую точку и запишите её координаты на третьей строке в том же формате. Запустите сцену в Unity и найдите объект Second Player. Оцените его расположение в игре с той точкой, которую вы отметили на карте – он должен попасть в радиус 5 метров от неё.

Примечания

Формат входного файла

В первой строке находится 2 числа x1 и z1 – координаты первого игрока на сцене в Unity. Во второй строке находится 2 числа φ1 и ψ1 – географические координаты первого игрока. В третьей строке находится 2 числа φ2 и ψ2 – географические координаты второго игрока.

Формат выходного файла

Выходной файл содержит два числа x2 и z2 – координаты второго игрока на сцене в Unity. Допускается любой ответ с погрешностью не более 5 метров. Реализовывать вывод в файл output.txt не нужно.

Ограничения

 − 2000 ≤ xi, zi ≤ 2000,
 − 90 ≤ φi ≤ 90, − 180 ≤ ψi ≤ 180, i ∈ {1,2}.

Примеры тестов

Входной файл (input.txt) Выходной файл (output.txt)
1
-587.68 135.34
43.03001773493322 131.89306628571381
43.029822179162174 131.8905516024877
-793.07 113.5914
2
99.26 -223.59
55.750001559564495 37.620949724754674
55.75005787416843 37.62208777500932
170.4828 -217.3285

0.120s 0.033s 13