Начало работы с симуляцией трафика в JavaScript

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

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

Я не ищу конкретный код, просто хорошие указатели и ресурсы, чтобы помочь мне начать работу. Любая помощь приветствуется, К.Руль.



PS Я только в старшей школе, поэтому никаких предварительных математических заметок не прошу:)

Ответ 1

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

Road representation

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

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

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

Ответ 2

  • Забудьте о пользовательском интерфейсе.
  • Представляем каждый объект в его базовой форме - только вставляем в него свойства объекта. Например, автомобиль будет иметь размер и способность двигаться. Но у него не будет логики, чтобы заставить его двигаться. Аналогично, светофор будет иметь такие состояния, как зеленый, желтый и красный. Но у него не будет логики переключаться между этими состояниями. Аналогичные классы для дорог, дорожек и т.д.
  • Создайте другой класс для драйвера. Этот класс будет содержать все методы, такие как перемещение полосы, остановка, поворот, движение вперед и т.д. Более технически это будет ваш "актер" и будет действовать на вехле. Аналогичным актером будет контроль светофора, который будет действовать в сети светофоров. Сделайте его интерфейсом и имейте две реализации - одно, которое использует взаимосвязь и другое, которое работает в статические моменты времени.
  • Дополнительно добавьте пользовательский интерфейс поверх этой объектной модели. Не увлекайтесь, попробуйте простые точки. Как только вы получите все простые вещи, работая, добавление более причудливых функций должно быть легким и удачным (относительно).

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

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

Все самое лучшее!

Ответ 3

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

Ответ 4

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

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

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

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

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

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

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

Это даст вам начало.

Ответ 5

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