zoukankan      html  css  js  c++  java
  • Steering Behaviors

    Steering Behaviors

    1、Seek

      下述的算法是一个基本Seek行为,但不带任何Steering输出的力。在该公式作用下,游戏个体的移动方式是直线型的,如果target的位置变了的话,个体会立即响应,并且会以新的方向,以直线的形式向目标位置靠近,这会给人一种从当前路径突兀的变换到新路径的感觉。

        

      Seek行为被分解为两个力:目标速度,和转向速度。目标速度始终朝向目标位置,转向力是目标速度减去个体的当前速度得出的,它的物理意义就是向着目标位置给个体一个推力。

        

        

      计算了转向力之后,它必须和原先版本的速度方向合成,再施加给个体。

        

        

      注意,seek中要限制steering的最大值,否则每一次 velocity+steering 均会等于 desired velocity。

    2、Flee。

      Flee的desired velocity调整为seek的相反位置:

        

        

      使用Flee算法,可以避免角色大幅转向(如180度)问题,如下,橘色为转向曲线:

        

      注意:Flee中也要对 steering 限速。

    3、Arrival

      Seek行为使个体向目标位置移动,当个体移动到目标点后,算法仍旧作用在个体之上,对它施加转向力,这会导致个体在目标点周围来回移动。

      Arrival行为会规避个体移动超过目标点的现象,当个体靠近目标点时,它会使个体减速,最终停在目标点上。

      行为被分成两个阶段:

        1)第一阶段是个体还远离目标点时,它的工作方式和之前介绍的Seek行为一样

        2)第二阶段是个体靠近目标点时,在减速范围内。

        

        

        

       注意:Arrival 中不需要对 steering 限速,因为如果desired_velocity降为0,那么转向力会是velocity,那么它和速度方向的合力为 0,个体就不会运动了。

    4、Wander

      游戏AI的前方加一个圈,圈的半径以及角色到圈的距离越大,施加在角色身上的推力就越强。

      1)CircleCenter 向量。

        

          

      2)displacement,计算移位力

        

        

      综合起来就是以下这样:

        

        

        

    5、Persulit

         

        

        

         当T是一个常数时,会有一个问题:在离目标点很近的距离下,追踪的准确度会变得很差。

        这是因为当追踪者靠近目标后,追踪者还是以常数T时间后的位置进行预测。这和真实的追踪行为相违背,真实的追铺在靠近物体后会停止预测,并且以物体当前实际位置作为目标点。

        有一个简单的方式来改进我们上面的追捕逻辑,就是用动态的T来替换之前恒定的T。

        

         

     6、整合

        

        

    参考:https://cloud.tencent.com/developer/article/1005839

  • 相关阅读:
    清理一瓶花茶中的虫子
    一些网上的新信息安全问题
    对于秋季高程备课的随笔
    用共享单车第一次遇到程序出现问题的思考
    开始带学生的一些感受
    对近期北辰开会的一些总结
    WSN和RFID书上好多问题:关于S50
    统计课设成绩用到excel画成绩频率分布曲线
    linux 常用命令
    局域网 ARP 欺骗原理详解
  • 原文地址:https://www.cnblogs.com/tekkaman/p/9210557.html
Copyright © 2011-2022 走看看