Автор: | Dmitriy Merzlyakov | Ограничение времени: | 1 сек | |
Входной файл: | input.txt | Ограничение памяти: | 512 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 100 |
Юный программист Вася работает над своим новым проектом в виртуальной реальности на Unity – он создаёт виртуальную копию нашей планеты в масштабе 1:1. Пока готово несколько небольших отдельных локаций, на которых он разметил схематичные здания, дороги, а также спроецировал изображение со спутника на поверхность. Поверхность каждой локации плоская, и направление севера совпадает с направлением оси Z в координатах Unity.
Вася планирует сделать проект многопользовательским и уже тестирует систему подключения игроков к виртуальному миру. Он хочет, чтобы пользователь сначала выбрал на карте своё местоположение, которое соответствует географическим координатам (φ,ψ), после чего тот появится на игровой сцене в координатах (x,0,z), которые соответствуют выбранному местоположению.
Допустим, первый игрок уже подключился и находится на сцене в координатах (x1, 0, z1), Положению первого игрока на сцене соответствует географическим координатам (φ1, ψ1). Второй пользователь выбрал на карте географические координаты (φ2,ψ2). Помогите Васе разместить игрока на позиции в локации, которая бы соответствовала его географическим координатам.
Вася подготовил сцену и написал несколько вспомогательных скриптов, вам осталось лишь реализовать функцию SpawnCoordinates()
типа Vector2
в классе
Solution
. Эта функция будет вызываться на старте программы, возвращать значение (x2,z2), и с её помощью Вася присвоит модели второго игрока его игровые
координаты (x2, 0,z2).
Весь ваш код должен находится в классе Solution
. Другие изменения в сцене учитываться не будут. Объект manager
предоставляет следующие функции для работы с входными данными:
manager.GetFirstPlayerPosition()
— возвращает координаты первого игрока на сцене Unity в виде Vector2
(x1, z1), где x1, z1
– компоненты позиции игрока;manager.GetEarthCoordsOfFirstPlayer()
— возвращает географические координаты первого игрока в виде массива double[2]
, где первый элемент –
широта (в градусах), второй – долгота (в градусах);manager.GetEarthCoordsOfSecondPlayer()
— возвращает географические координаты второго игрока в виде массива double[2]
, где первый элемент –
широта (в градусах), второй – долгота (в градусах).
Проект доступен по этой ссылке: https://github.com/Collider24/Earth-VR
,
Вам осталось реализовать класс Solution
. Доступно две локации для отладки вашего решения – кампус ДВФУ на острове Русский и Красная площадь в Москве.
Модели локаций были получены с помощью OpenStreetMap
. Решение будет проверяться на бóльшем количестве локаций, расположенных в разных частях мира.
Для тестирования своего решения вы можете изменять данные, находящиеся в файле input.txt
в корне папки с проектом.
Процедура тестирования осуществляется следующим образом: выберете сцену с одной из двух локаций и откройте её. Разместите объект Test Player
в произвольной
точке на игровой модели, и запишите в input.txt
два числа через пробел x1, z1 - компоненты позиции игрока. Далее, с помощью любого картографического сервиса найдите
выбранную вами точку на карте и скопируйте её географические координаты – запишите их во вторую строку через пробел без запятой (сначала широту, затем долготу).
Выберете на карте любую другую точку и запишите её координаты на третьей строке в том же формате. Запустите сцену в Unity и найдите объект Second Player
.
Оцените его расположение в игре с той точкой, которую вы отметили на карте – он должен попасть в радиус 5 метров от неё.
Примечания
input.txt
- вместо этого используйте соответствующие функции в объекте manager
.В первой строке находится 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 |
|
|
2 |
|
|