Vector2D SteeringBehaviorCalculateDithered reset the steering force m_vSteeringForceZero; if Onwall_avoidance && RandFloat PrmprWallAvoidance m_vSteeringForce = WallAvoidancem_pVehicle-World-Walls
这段代码是Steering Behavior的核心计算部分,用于计算出一个合适的力(m_vSteeringForce),使得车辆能够根据当前的状态和设置的权重(m_dWeightXXX)执行相应的行为(XXX)。其中,On(XXX)用于判断是否开启了某个行为,RandFloat()用于随机决定是否执行某个行为。具体来说:
-
如果开启了wall_avoidance行为,并且随机数小于prWallAvoidance,那么执行WallAvoidance()方法得到一个避免墙壁的力,并加上相应的权重,最后将这个力截断为最大力,并返回。
-
如果开启了obstacle_avoidance行为,并且随机数小于prObstacleAvoidance,那么执行ObstacleAvoidance()方法得到一个避免障碍物的力,并加上相应的权重,最后将这个力截断为最大力,并返回。
-
如果开启了separation行为,并且随机数小于prSeparation,那么执行Separation()方法得到一个避免与其他车辆过于靠近的力,并加上相应的权重,最后将这个力截断为最大力,并返回。
-
如果开启了flee行为,并且随机数小于prFlee,那么执行Flee()方法得到一个逃避目标的力,并加上相应的权重,最后将这个力截断为最大力,并返回。
-
如果开启了evade行为,并且随机数小于prEvade,那么执行Evade()方法得到一个逃避追逐目标的力,并加上相应的权重,最后将这个力截断为最大力,并返回。
-
如果开启了alignment行为,并且随机数小于prAlignment,那么执行Alignment()方法得到一个与其他车辆保持一致的力,并加上相应的权重,最后将这个力截断为最大力,并返回。
-
如果开启了cohesion行为,并且随机数小于prCohesion,那么执行Cohesion()方法得到一个与其他车辆靠近的力,并加上相应的权重,最后将这个力截断为最大力,并返回。
-
如果开启了wander行为,并且随机数小于prWander,那么执行Wander()方法得到一个随机漫步的力,并加上相应的权重,最后将这个力截断为最大力,并返回。
-
如果开启了seek行为,并且随机数小于prSeek,那么执行Seek()方法得到一个寻找目标的力,并加上相应的权重,最后将这个力截断为最大力,并返回。
-
如果开启了arrive行为,并且随机数小于prArrive,那么执行Arrive()方法得到一个到达目标的力,并加上相应的权重,最后将这个力截断为最大力,并返回。
最后,如果以上所有行为都没有被执行,那么返回一个空力
原文地址: https://www.cveoy.top/t/topic/eB27 著作权归作者所有。请勿转载和采集!