You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

疏散模型中节点准入被拒时行人目标出口切换的代码实现

行人疏散模型路线切换需求及代码实现

模型背景

  • 我搭建了一个行人疏散模型,布局中行人从绿色目标线出发,可选择两个红色标记的出口疏散:exit1有10%阻塞概率,exit2有50%阻塞概率。
  • 当两个出口都可用时,已实现让行人前往当前位置最近的可用出口的逻辑,availableExits为存储可用出口的集合,对应逻辑已完成。
  • 布局中设置了一个带访问限制的红色节点,同时容纳行人上限为8;当两个出口均可用时,到达该节点的行人会因exit1更近而选择它。

需求

希望在该节点的**"On enter denied"**事件中编写代码,让被拒绝进入该节点的行人,将目标从exit1切换至次近的exit2,模拟疏散中寻找更畅通路线的行为。

代码实现方案

在节点的"On enter denied"事件中添加以下代码即可实现需求:

场景一:仅两个出口的简化写法

// 获取当前被拒绝进入的行人
Pedestrian ped = getPedestrian();
// 移除原目标exit1,将exit2设为新目标
ped.removeDestination(exit1);
ped.setDestination(exit2);

场景二:支持多出口的通用写法(扩展性更强)

// 获取当前被拒绝进入的行人
Pedestrian ped = getPedestrian();
// 从可用出口集合中排除原目标exit1
Collection<Exit> alternativeExits = new HashSet<>(availableExits);
alternativeExits.remove(exit1);

// 从剩余可用出口中计算最近的那个
Exit nearestAlternative = null;
double minDistance = Double.MAX_VALUE;
for(Exit exit : alternativeExits) {
    double distance = ped.getDistanceTo(exit);
    if(distance < minDistance) {
        minDistance = distance;
        nearestAlternative = exit;
    }
}

// 切换至新目标
if(nearestAlternative != null) {
    ped.removeDestination(exit1);
    ped.setDestination(nearestAlternative);
}

代码说明

  • 简化写法适合固定两个出口的场景,逻辑直接清晰。
  • 通用写法适合出口数量可能调整的场景,会自动从剩余可用出口中重新筛选最近的作为新目标,无需修改代码适配出口数量变化。

内容的提问来源于stack exchange,提问作者SA_2003

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 04:51:14