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

如何在AnyLogic中计算两个行人智能体的相对速度

AnyLogic行人仿真两指定行人相对速度计算方案

核心原理

行人库内置的getSpeed()方法仅返回速度矢量的模长(即无方向的标量速率),丢失了运动方向信息,直接对两个行人的getSpeed()返回值做差不具备物理意义。相对速度是矢量,需要基于两个行人的实时速度分量做矢量运算得到结果。

具体实现步骤

  • 获取行人实时速度分量
    行人对象内置了全局坐标系下的速度分量获取方法,返回值已经包含运动方向、运动速率信息,2D仿真场景下仅需获取x、y两个方向的分量即可:
    // 假设两个待计算的行人实例为ped1、ped2
    // 提取ped1的速度分量
    double v1x = ped1.getXVelocity();
    double v1y = ped1.getYVelocity();
    // 提取ped2的速度分量
    double v2x = ped2.getXVelocity();
    double v2y = ped2.getYVelocity();
    
    3D仿真场景下可额外通过getZVelocity()获取垂直方向速度分量,计算逻辑和2D一致。
  • 计算相对速度矢量
    相对速度满足矢量减法规则:若要计算ped1相对于ped2的相对速度,直接对同方向分量做差即可:
    double relVx = v1x - v2x;
    double relVy = v1y - v2y;
    
    若需要ped2相对于ped1的相对速度,将分量减数和被减数互换即可。
  • 按需输出计算结果
    • 若需要保留相对运动的方向属性(如判断行人是靠近还是远离、计算相对运动方向角),可直接使用relVx、relVy分量做后续逻辑判断,例如相对运动方向角可通过Math.atan2(relVy, relVx)计算得到。
    • 若需要相对速度的标量大小(即相对速率,和getSpeed()返回值格式一致),对差分量求平方和开根号即可:
    double relSpeed = Math.hypot(relVx, relVy);
    

注意:上述方法在楼梯、自动扶梯、自定义运动路径等所有场景下均有效,getXVelocity()、getYVelocity()返回的是引擎实时计算的行人实际运动速度,已经包含了设施带动的位移、路径转向带来的方向变化,无需额外做方向修正。不建议通过相邻仿真步的行人位置差自行计算速度,该方法会受步长波动影响产生计算误差,精度低于内置方法的返回结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:54:37