Автор: | 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 |
|
|
Автор: | Sergei Kiselev | Ограничение времени: | 15 сек | |
Входной файл: | input.txt | Ограничение памяти: | 512 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 100 |
В далёкой, далёкой галактике существует Чёрная дыра, которая поглощает звёзды, чтобы увеличить свою массу. Однако, для увеличения массы подходят только новые синие звёзды, а красные массу наоборот уменьшают.
Помогите чёрной дыре поглотить все новые синие звёзды и ни одной красной.
На сцене появляются красные и синие звёзды, все они лежат на “космической материи”. Если вырезать из “космической материи” часть под звёздами, то образуется чёрная дыра и звёзды провалятся в неё.
Необходимо сделать такой вырез в “космической материи”, чтобы в образовавшуюся чёрную дыру упали только синие звёзды.
Гарантируется, что все синие звёзды лежат внутри минимальной описывающей окружности, а все красные снаружи.
Автоматически подсчитывается результат работы вашего решения - изменение массы чёрной дыры. В начале программы оно равно нулю. Каждая синяя звезда повышает изменение массы на единицу, каждая красная уменьшает на единицу.
Вам нужно реализовать класс Solution
, находящийся в корне проекта в файле под именем Solution.gd
. Другие изменения в проекте учитываться не будут.
Родительский класс SolutionWrapper
предоставляет вам следующие методы для решения задачи:
get_stars()
— Возвращает список объектов типа Star
. Каждый из них содержит следующие поля: position :Vector3
- позиция звезды в глобальном пространстве, var radius :float
- радиус звезды, var type :bool
- тип звезды (true - синяя, false - красная).get_matter_csg_node()
— возвращает находящийся на сцене объект CSGBox3D
, являющийся "материей".
Проект
здесь
,
Вам нужно только реализовать класс Solution
.
Вы можете тестировать свои решения, изменяя данные, содержащиеся в файле input.txt
в репозитории проекта.
Подсказка: Задача о наименьшей окружности (minimal enclosing circle и т.д.) имеет единственное решение. Возможность получения радиуса звёзд не используется в его нахождении.
Первая строка входного файла содержит N - количество звёзд.
Далее следует список из N строк по пять чисел x, y, z, d, type описывающий звёзды (позиция, диаметр, тип).
Реализовывать считывание данных с файла input.txt
не нужно.
Для получения данных используйте функции, доступные в классе Solution
.
Выходной файл содержит одно число - масса чёрной дыры после появления.
Файл с решением должен содержать реализацию класса Solution
.
Реализовывать самостоятельно вывод в файл output.txt
не нужно.
10 ≤ N ≤ 100
− 50 ≤ x, y, z ≤ 50
1 ≤ d ≤ 8
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
2 |
|
|
Автор: | А. Баранов | Ограничение времени: | 1 сек | |
Входной файл: | input.txt | Ограничение памяти: | 256 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 100 |
В одной исследовательской лаборатории собираются провести очередной эксперимент с подвижными частицами,
в рамках которого им придется взаимодействовать с некоторым объектом, имеющим форму тора.
Известно, что каждая такая частица в течение всей своей жизни совершает непрерывное
прямолинейное движение с некоторой постоянной скоростью.
При столкновении с каким-либо препятствием, она отклоняется от исходной траектории,
а затем продолжает свое движение, как ни в чем не бывало.
В очень редких случаях также могут встречаться абсолютно неподвижные частицы, скорости которых равны нулю.
Будем полагать, что тор задается радиусами направляющей R1 и образующей R2 окружностей.
Его ось вращения совпадает с осью Oz, а центр лежит в начале координат.
Первоначально все исходные частицы можно условно разбить на две группы: лежащие внутри и снаружи тора.
Важным условием здесь является то, что в процессе движения ни одна из частиц не должна покидать область,
которой она принадлежала в начальный момент времени.
Рассмотрим поведение указанных частиц на временном интервале от 0 до T.
В процессе своего движения каждая отдельно взятая частица может то и дело сталкиваться с границей тора.
При столкновении с тором частица отражается от вектора нормали в соответствующей точке (см. рисунок).
Модуль ее скорости при этом сохраняется.
Требуется написать программу, которая по известному начальному положению частиц,
исходным компонентам скорости и параметрам тора производит расчет их траекторий
в течение заданного промежутка времени.
В качестве ответа выведите координаты положения частиц
в равноотстоящие моменты времени:
tk = k ⋅ Tm, где k = 1, 2, …, m.
В первой строке входного файла содержатся радиусы направляющей R1 и образующей R2 окружностей тора.
Во второй строке указано значение T, задающее длину временного интервала, и число его подынтервалов m.
Далее следует натуральное число n и последовательность из 6 × n вещественных чисел,
задающих начальные координаты и скорости каждой из частиц:
Xi, Yi, Zi, Ui, Vi, Wi.
Выходной файл должен содержать координаты положения частиц в моменты времени tk,
расположенные в том же порядке, что и во входном файле.
Все значения должны быть указаны с точностью
до 5-го знака после запятой.
Полагается, что начальное расстояние от каждой частицы до поверхности тора ≥ 10 − 2.
Гарантируется, что для каждой отдельной частицы число столкновений с тором
на заданном интервале не превосходит 20.
10 ≥ (R1 − 1) ≥ R2 ≥ 1, 0 < T ≤ 10, 0 < m ≤ 10,
− 10 ≤ (Xi, Yi, Zi, Ui, Vi, Wi) ≤ 10,
0 < n ≤ 4000
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
Автор: | Камалов Р.О. | Ограничение времени: | 5 сек | |
Входной файл: | input.txt | Ограничение памяти: | 1512 Мб | |
Выходной файл: | output.png | |||
Максимальный балл: | 100 |
Вам необходимо разработать 3D модель спутника.
Терминология
Корпус спутника - цилиндр радиусом - 2m, высотой - 6m, с 34 вершинами у окружности этого цилиндра. В самом корпусе находится паз высотой - 1/9 высоты цилиндра и глубиной - 0.5m. Солнечные батареи соединяются с корпусом параллелепипедами высотой - 0.5m, шириной - 0.5m, толщиной - 0.369m. Между параллелепипедами есть расстояние в 1m. Сами же солнечные батареи представляют из себя параллелепипеды высотой - 5m, шириной - 4m, толщиной - 0.5m. Солнечные батареи располагаются параллельно оси Ox. Двигатель - усеченный конус, радиус меньшего основания конуса - 1m, радиус большего основания конуса - 2m, высота - 2m. Спутниковая антенна - полая полусфера радиусом - 2m. Приемник - сфера радиусом - 0.2m. Расстояние между основанием тарелки антенны и приемником - 2.8m. Расположение модели относительно начала центра координат смотри на рис. 6.
Модель проверяется на основе попиксельного сравнения рендеров с указанных во входном файле ракурсов. Используется этот материал. Файл с материалом должен называться solve.mtl. В качестве метрики для сравнения рендеров моделей используется величина dssim по каждому цветовому каналу. Баллы за каждый тест начисляются в зависимости от величины метрики.
Источник света:
Type | Sun |
Color | (255, 255, 255) |
Specular | 1.00 |
Strength | 10.0 |
Angle | 180 |
Location | (0 m, 0 m, 20 m) |
Rotation | (0, 0, 0) |
Камера:
Focal Length | 50mm |
Render Engine: Eevee
Во входном файле содержатся x, y, z — координаты камеры в метрах и rx, ry, rz — углы поворота в радианах.
В качестве решения следует отправлять файл формата OBJ (расширение .obj
).
Размер файла не должен превышать 999997 Байт.
№ | Входной файл (input.txt ) |
Выходной файл (output.png ) |
---|---|---|
1 |
|
|
2 |
|
|
3 |
|
|