Моделирование движения
Этап 1, тестовый. (задача будет иметь продолжение), вопросы можно задавать на [email protected]
Язык Delphi или ActionScript, либо предлагайте любые свои варианты. В архиве лежит xml файл с простой структурой, содержащий пример описания геометрии помещения. Выполнение всех пунктов задания не обязательно, можно указать цены и сроки только по отдельным пунктам, которые Вы предлагаете выполнить.
1. Прочитать данные из файла. Нарисовать двумерное изображение проекции помещения - вид сверху. Предоставить пользователю возможность приближать/удалять изображение без потери качества.
2. Расположить внутри случайным образом несколько окружностей разного радиуса, задать им начальное направление и скорости. Анимировать их движение, по аналогии с бильярдом или с пинболом. При этом пока требуется учитывать только изменение направлений. Во время анимации непрерывно отображать вектор скорости. В момент соударений между собой и со стенами отображать на секунду (либо пауза в анимации) касательную линию и перпендикуляр к ней в точке соударения.
3. Дать пользователю возможность приостановить анимацию, и при нажатии на любую из окружностей отобразить ее фигуру смещения в направлении вектора скорости. При этом не учитывать возможные соударения, а лишь вычислить какой процент ее площади частично или полностью перекрывает площади других окружностей, (которые в это время должны быть неподвижны). При этом, все что дальше первого пересечения со стеной считать находящимся за стеной.
4. Отобразить информацию о текущем количестве окружностей в каждой из комнат, о суммарном количестве произошедших с начала запуска соударений со стенами и отдельно количество соударений между собой. Так же отображать для пункта 3 общую площадь фигуры смещения, площадь пересечения с окружностями и площадь "за стеной", и максимальную длину возможного перемещения без соударений.
5. Реализовать визуализацию этого всего в 3D с возможностью управления пользователем положением камеры, а так же установки камеры на движущемся объекте. Вместо окружности отображать цилиндр высотой в половину помещения.