Начало работы с симуляцией трафика в JavaScript - PullRequest
10 голосов
/ 15 мая 2011

Я собираюсь задавать много вопросов в ближайшие месяцы.Для моего научного ярмарочного проекта в девятом классе я хотел бы создать симулятор дорожного движения, чтобы проверить, могут ли взаимосвязанные светофоры сообщать увеличить поток трафика.У меня есть пара общих вопросов, с которыми мне нужна помощь ...

  • Как бы я представлял дороги?
  • Как бы я заставил машину следовать по дороге?
  • Как бы я заставил машину переключать полосы или дороги?

Я не ищу конкретный код, просто хорошие указатели и ресурсы, которые помогут мне начать работу.Любая помощь приветствуется, C.Ruhl.PS Я учусь только в старших классах, поэтому, пожалуйста, никаких математических обозначений:)

Ответы [ 5 ]

7 голосов
/ 15 мая 2011

Один из возможных подходов, который используется довольно часто, заключается в использовании дискретной модели для расположения дорог и автомобилей.

Road representation

Каждая позиция на дороге может быть занятаавтомобиль (синяя точка) или быть пустым.Автомобили движутся с дискретными временными шагами ровно на одну позицию (если целевая позиция пуста) вдоль заданных стрелок.Таким образом, автомобиль может даже переключать полосы движения, если в противном случае ему пришлось бы замедляться или останавливаться.

Вы можете улучшить его, используя отдельные временные шаги для каждого автомобиля (моделирование более быстрых / более медленных автомобилей) или многими другими способами.

После того, как вы определили свои дороги (то есть позиции и их последующие позиции) с помощью соответствующей структуры данных, эту модель относительно легко смоделировать, но она уже показывает интересные эффекты.

7 голосов
/ 15 мая 2011
  1. Забудьте об интерфейсе.
  2. Представляет каждый объект в его базовой форме - только поместите свойства объекта в него.Например, автомобиль будет иметь размер и способность двигаться.Но у него не будет логики, чтобы заставить его двигаться.Точно так же у светофора будут состояния, такие как зеленый, желтый и красный.Но не будет логики для переключения между этими состояниями.Подобные классы для дорог, полос и т. Д.
  3. Создайте другой класс для водителя.Этот класс будет содержать все методы, такие как смещение полосы, остановка, поворот, движение вперед и т. Д. С технической точки зрения, это будет ваш «актер» и будет действовать на veichle.Подобный актер был бы для управления светофора, который будет действовать в сети светофоров.Сделайте его интерфейсом и получите две реализации: одну, которая использует преимущества взаимосвязанности, и другую, которая работает в статическое время.
  4. Необязательно добавить пользовательский интерфейс поверх этой объектной модели.Не фантазируйте, начните с простых точек.После того, как все простые вещи заработают, добавление более необычных функций должно быть легким и без последствий (относительно).

Это будет очень сложный проект.

Но если ваша цель - подтверждение концепции, у меня есть более простое предложение.Вы можете воспользоваться созданным пользователем здесь и получить всю сложность симуляции и всю точность. Начните с 15-20 автомобилей с дистанционным управлением, картонной модели вымышленного города, нескольких лампочек для имитации светофора и нескольких добровольцев, которые знают, какпривод.Подготовьте заранее запрограммированную последовательность включений и выключений на бумаге и поручите некоторым добровольцам управлять этими огнями.Пусть другой набор добровольцев будет управлять машинами.Если у вас есть практический опыт работы с базовой электроникой, вы можете создать схему с таймером для управления освещением.

Всего самого наилучшего!

2 голосов
/ 12 июля 2011

Вы можете попробовать библиотеку дискретного моделирования событий SIM.JS в Javascript.У них есть очень простой пример для движения на симуляции пересечения дорог здесь .

1 голос
/ 15 мая 2011

Для экзамена на степень бакалавра я разработал веб-приложение для управления движением, которое отслеживало транспортные средства в моем городе в режиме реального времени, и использовал API Google Maps.
Я предлагаю вам использовать картографический сервис, например maps.google.com, yahoo.maps.com ...
У них есть API для всего ... вы можете использовать маркеры для представления чего-либо на карте (автомобили, уличные фонари, даже пешеходы :))), и вы можете использовать их API для расчета расстояний и путей.
Это может показаться немного более сложным, чем обычная реализация div, но, поверьте мне, это большой плюс - использовать сервис с хорошо организованным API.
+ это будет выглядеть более профессионально;).

1 голос
/ 15 мая 2011

Ох, Коннер, вы действительно нашли интересный вопрос - и тот, который является предметом исследования даже сегодня.Вот предложение: прежде чем беспокоиться о том, как сделать это в JavaScript, потратьте некоторое время на размышления о том, как это сделать вообще.

Вот предложение: сначала подумайте о объектах, которые были задействованы.У вас есть автомобили, и они путешествуют по дорогам.Начните с квадратной сетки дорог, чтобы ваши машины двигались от перекрестка к перекрестку.

Выберите фиксированную скорость для автомобилей, поэтому для перехода от перекрестка к перекрестку требуется постоянное время.

У каждого перекрестка есть светофор, который может быть красным или зеленым.Если это красный, конечно, автомобили не могут пройти;они должны ждать.

Теперь ваша базовая программа будет выглядеть как

time = 0
while time < end-time:
    for each car:
        update the car's location
    add time consumed to time

, когда вы обновляете местоположение автомобилей, что происходит?(Подсказка: машина движется; она может проехать перекресток или нет?)

Это даст вам старт.

...