[AI-Steering编程]五.追捕行为
五.追捕行为 追捕行为实际是寻找行为的一种(这句话好耳熟啊,哈哈,上一章里就说过了).
5.1 目的
计算追逐对象的未来目标,实现有效的追捕
5.2 实现
计算目标的”未来位置”,机车先发制人,在”未来目标”等着目标.
5.3 讨论
关于追捕与寻找的区别 ,看一下示例 ”5-1-Compare.swf ”就明白了
5-1-Compare.swf (4.23 KB)
下载消耗 银子 1 两
如上图所示,白色机车以恒定的速度向右移动,红色的机车以seek的方式”寻找”机车,其中红色的虚线是其路线,而蓝色的机车是以pursue的方式”追捕”机车,蓝色的虚线是其路线. 这样再解释起来就简单多了.
要想追上你的目标,有两种方法,一是你的速度比目标快,二是在目标前面等着他.
对于第一种情况,在我们的代码 中,所有机车的最大速度都一样,都是maxSpeed.所以这个方法不是我们本节讨论的内容.
再看第二种方法,在目标的前面等着它,什么意思?就像我的示例” 5-1-Compare.swf”里一样,白色机车以恒定的速度像右移动.要想在它前面等着就要知道这个”未来目标”地方在哪里,我们把这个”未来目标”定义为predictedTarget;
如上图所示,predictedTarget应该等于机车的位置加上distance,这个没有疑问吧.即vech.position.add(distance.position);所以下面的问题就是这个distance应该怎么算呢?
距离肯定就是速度乘以时间了,白色机车的速度是vech.velocity,这是一个已知量,不用担心,那么问题的最后就是计算这个时间了.
想一想,在我们追到目标之前,目标有多长的时间可以逃跑?就是我们追他的这段时间嘛lookAheadTime,这个时间就是我们与目标之间的距离除以我们的宿舍啊!转换到机车来想就是:
lookAheadTime = pursuer.position.dist(vech.position)/maxSpeed;
你有可能就问了:”pursuer与白色机车vech的距离不是一直在变化中的啊,那怎么算啊?”哈哈,刚好,我的lookAheadTime也是及时更新的,看下下面的代码你就知道了!
public function pursue(target:Vehicle):void {
var lookAheadTime:Number = target.position.dist(_position) / _maxSpeed;
//计算此时追上目标的预计时间,即lookAheadTime.
var predictedTarget:Vector2D = target.position.add(target.velocity.multiply(lookAheadTime));
//在这段时间内,目标以现在的速度,预计会到达的位置,即"未来目标"
seek(predictedTarget);
//寻找这个"未来目标"
}
在下面的示例 ” 5-1-Pursue.swf” 中 , 我创建了三个对象 , 白色的 vech, 红色的 seeker 和蓝色的 pursuer. 他们之间关系 ,vech.flee(seeker),seeker.seek(vech),pursuer.pursue(vech).
5-1-Pursue.swf (4.22 KB)
下载消耗 银子 1 两
文档 Pursue 类如下 , 我就不做过多的解释了 :
package
{
import flash.display.Graphics;
import flash.display.Sprite;
import flash.events.Event;
import ladeng6666.steering.Vector2D;
import ladeng6666.steering.Vehicle;
import ladeng6666.steering.TargetObj;
public class Pursue extends Sprite
{
private var vech:Vehicle; //机车实例
private var seeker:Vehicle; //添加红色的机车,来seek白色的机车
private var pursuer:Vehicle //添加蓝色的的机车,来pursue白色的机车
public function Pursue()
{
vech = new Vehicle();
vech.position = new Vector2D(100, 200);
vech.edgeBehavior = Vehicle.BOUNCE;
seeker = new Vehicle(0xff0000);
seeker.edgeBehavior = Vehicle.BOUNCE;
pursuer = new Vehicle(0x0000ff);
addChild(vech);
addChild(seeker);
addChild(pursuer);
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
//按照帧频随速度更新机车的位置
private function enterFrameHandler(e:Event):void {
vech.flee(seeker.position);
vech.update();
seeker.seek(vech.position);
seeker.update();
pursuer.pursue(vech);
pursuer.update();
}
}
}
本章的源码 如下:
chapter5.rar (19.76 KB)
下载消耗 银子 1 两
[AI-Steering编程]五.追捕行为相关推荐
- AI来编程,码农何去何从?
https://www.toutiao.com/a6701117808886940167/ AI来编程,码农何去何从? [网易智能讯6月11日消息]还记得软件席卷世界的时候吗?一个最近比较流行的观点是 ...
- ai人工智能编程_从人工智能动态编程:Q学习
ai人工智能编程 A failure is not always a mistake, it may simply be the best one can do under the circumsta ...
- 五轴编程_沙井万丰数控数控编程五轴编程那个软件好用
沙井万丰数控数控编程五轴编程那个软件好用设计需要掌握很高很全面的知识和技能,模具做的好,产品质量好,模具结构合理,生产效率高,工厂效益好.正因如此,模具技术工在外打工的工资都非常的高.少则每月几千元, ...
- yolo v3制作自己的数据_【手把手AI项目】五、自己制作图像VOC数据集--Objection Detection(目标检测)...
文章首发于我的个人博客 [手把手AI项目]五.自己制作图像VOC数据集--用于Objection Detection(目标检测)blog.csdn.net 喜欢手机观看的朋友也可以在我的个人公号: ...
- 普通家庭,千万不要投入大量时间和金钱,让孩子去苦学和培养AI机器人编程了...
普通家庭,千万不要投入大量时间和金钱,让孩子去苦学和培养一些看似高端,实际却用处不大的兴趣爱好课程了,比如学钢琴.学音乐.学AI机器人编程这些兴趣爱好课程. 这些对孩子的成长其实意义并不大,尤其是AI ...
- 阿里云AI训练营第五天
AI训练营 第五天 课程日期:21年03月26日,周五 实践 登录云开发平台,并配置相关选项 创建应用,选择Java并在计算机服务中,选择动漫人像化模板 填写基础的应用信息并开通云服务 需要开通的切记 ...
- Linux网络编程-五
Linux网络编程-五 1 线程池并发服务器 2 UDP通信 2.1TCP和UDP的区别 2.2 UDP通信相关函数介绍: 2.3 UDP的服务器和客户端编码流程 2.4 代码练习 3 本地socke ...
- 地表最强AI 辅助编程工具——GitHub Copilot安装教程
GitHub Copilot 文章目录 GitHub Copilot 一.GitHub Copilot 介绍 二.GitHub Copilot 通行证注册流程 1.打开GitHub Copilot [ ...
- c语言二维图形变换程序,C语言图形编程(五、二维图形变换-01)(国外英文资料).doc...
C语言图形编程(五.二维图形变换-01)(国外英文资料) C语言图形编程(五.二维图形变换-01)(国外英文资料) The first user coordinates to the screen c ...
最新文章
- jedis操作redis(一)
- SAP Basis如何显示SAP中所有用户列表
- 算法小白——基本排序算法入门
- 【收藏】RPM包制作和spec文件详解
- 青岛工学院计算机专业分数线,青岛工学院分数线
- selenium下打开Chrome报错解决
- String s = new String(“abc“)创建了几个对象
- 一文读懂数据湖 | 凌云时刻
- 第10课:JSP指令 Page指令 (JSP教程 JSP入门实战教程 黄菊华Java网站开发系列教程)
- 统计学基础知识之统计思维
- Java具体可以做什么?
- NDK中LOCAL_SHARED_LIBRARIES
- 【LLM大模型】模型和指令微调方法
- Java底层小开发的面试经历
- ImportError: DLL load failed while importing qhull:问题解决
- Python Pandas DataFrame 表格 打印输出不能对齐的两种解决方案
- QQ群裂变引流做CPA,日引500+流量
- Active Directory渗透
- 不晓得这是航拍器还是探测器之类的,肉眼根本无法看清
- 本原勾股数的表示方法
热门文章
- java中的构造方法必须和类名相同_1. 对于构造方法,下列叙述不正确的是( ). A、 构造方法是类的一种特殊方法,它的方法名必须与类名相同...
- base64图片会比原来二进制转换前大多少
- Martin Fowler关于微服务的原文翻译(一)
- Halcon算子--区域特征
- LED显示屏8*8点阵的原理详解与汉字代码
- 基于蒙特卡洛法的概率潮流 以IEEE33节点的电网为研究对象 建立了光伏和风电的概率出力模型
- SWOT分析与生涯规划PPT[推荐]
- 项目问题记录:使用javascript打字库type.js时出现两个光标——useeffect销毁元素
- php违章网站开发,基于聚合数据的全国车辆违章接口示例-PHP版本
- 极速办公(excel)如何隔行求和