Простое моделирование: быстрая перемотка вперед и обычный таймер - PullRequest
0 голосов
/ 16 марта 2012

Простое моделирование рисования и перемещения использует следующее:

Таймер часов .Интервал: 200 мс . Таймер движения .Интервал: 1мс . Константа движения. Значение: 2.

Каждый раз, когда срабатывает таймер движения , изображение перемещается путем сложения с помощью константы движения.(т. е. изображение. X = изображение. X + постоянная движения)

Проблема заключается в ускоренной перемотке .Пользователь может в любое время перемотать симуляцию вперед.

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

Ответы [ 3 ]

2 голосов
/ 16 марта 2012

Если для быстрой пересылки достаточно целочисленных множителей (1x, 2x, 3x, ...), вы можете просто запустить функцию моделирования несколько раз во время функции обработчика таймера.

Я не уверен, чтоВы делаете с таймером, хотя тот же принцип применим ко всему, что он делает.

1 голос
/ 17 марта 2012

Как и предполагал Ганс, во многих симуляциях есть «размер зерна» во времени и пространстве.Затем агенты планируются путем пропуска временных интервалов («тиков»).Однако, если вам нужно более гибкое и хорошо протестированное планирование, вы можете позаимствовать планировщик из пакета моделирования ABM, такого как Mason (для Java) или Repast (Java или C ++), или взглянуть на их коды классов планировщика с открытым исходным кодом.и перевести на другой язык.

1 голос
/ 16 марта 2012

Вы можете иметь «внутреннее время», которое не зависит от «реального времени». Когда система работает на базовой скорости, эти два сигнала увеличиваются синхронно (каждый такт таймера, который равен 1 мс, добавляет 1 мс к внутреннему времени.
Если у вас есть коэффициент ускорения 2x, то добавьте 2 мс к внутреннему времени для каждого такта таймера.

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

newposition = startposition + speed * time
...