Нетлого - линия пересечения черепах - PullRequest
0 голосов
/ 09 ноября 2019

Я хочу сосчитать черепах, которые пересекают линию - я попробовал с «черепахой на заплате», но если остановка черепахи, это считается дважды. Если черепаха двигается более чем на 1 патч, это ничего не значит ... есть идеи? Спасибо Петру

Линия

Ответы [ 2 ]

0 голосов
/ 10 ноября 2019

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

0 голосов
/ 09 ноября 2019

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

Чтобы поймать перекрестки:

Одна вещь, которую вы могли бы сделать, это сделать более толстую «линию» на дальней стороне финишной линии. Может быть, сделать это 5 патчей в ширину. Вы можете покрасить его в желтый цвет во время тестирования и изменить на скрытый, если вы уверены, что он работает. Если черепаха находится на этом участке, она пересекла черту. Если вы сделаете его достаточно широким, его нельзя будет перепрыгнуть с любой скоростью. Это должно быть легко проверить, используя только одну черепаху и медленно управляя моделью.

Для подсчета остановленных машин:

Не видя ваш код, трудно понять, почему высчитать остановленные машины дважды. Можете ли вы опубликовать свой код или соответствующий раздел здесь? Я предполагаю, что у вас есть какой-то глобальный объект, который вы увеличиваете каждый раз, когда находите новую остановленную машину.

Менее эффективно, но гораздо надежнее позволить автомобилям иметь переменную типа "остановлено?"что вы инициализируете в false и устанавливаете в true, когда автомобиль пересекает линию. Затем в любой момент вы можете получить точное количество остановленных автомобилей с помощью

count cars with [ stopped? = true ]

. Предполагая, что у вас есть переменная my-count остановленных автомобилей, и вы хотите увидеть, когда что-то пойдет не так, вы можете вставитьстрока кода типа

if mycount != count cars with [stopped? = true] [user-message "count is wrong!"]
...