AI简单平移追踪算法
1.比较坐标追踪法

追踪者会不停地比较自身和目标的x坐标和y坐标,每x和y上一个单位的移动为一个周期,该算法虽然简单好用,但实用性差且不智能化,如果追踪者数量增加,路线会显得单调,由于都是先走个对角线再一路直行,很可能造成多个追踪者拥堵在一起。
代码:
while(!(rigesha.x==killer.x&&rigesha.y==killer.y)){
if(rigesha.x>killer.x){
killer.goRight();
}else if(rigesha.x<killer.x){
killer.goLeft();
}
if(rigesha.y>killer.y){
killer.goDown();
}else if(rigesha.y<killer.y){
killer.goUp();
}
}
2.射线动态追踪法

先在追踪者和目标之间建立一条直线,如图所示,然后再通过三角形面积公式法,模拟上行或左行一个单位后,距离该直线的距离,比较这两个距离,执行最短距离所对应的操作。
这样一来,追踪路线会尽可能接近直线,AI效果会更逼真。
在追踪过程中,如果监测到目标改变位置(此例假设目标每一帧都逃跑),那么追踪者就会重新建立两者之间的直线,然后沿着该直线继续追踪(如图所示)。
代码:
rigeshaX = rigesha.x;
rigeshaY = rigesha.y;
killerX = killer.x;
killerY = killer.y;
while(!(rigesha.x==killer.x&&rigesha.y==killer.y)){ if(Random(0,1)>0.5){
if(rigesha.x>killer.x){rigesha.goRight();}else{rigesha.goLeft();}
}else{
if(rigesha.y>killer.y){rigesha.goDown();}else{rigesha.goUp();}
}
rigesha.move = true;
} if(rigesha.move){
caculaterLine();
} float rightDistanse = xORy(++killer.x,killer.y);
float leftDistance = xORy(--(--killer.x),killer.y);
float upDistance = xORy(++killer.x),--killer.y);
float downDistance = xORy(killer.x,++(++killer.y));
killer.y--; if(rigesha.x<=killer.x&&rigesha.y<=killer.y){
if(leftDistance<=upDistance){
killer.goLeft();
}else{
killer.goUp();
}
rigesha.move = false;
continue;
} if(rigesha.x>=killer.x&&rigesha.y<=killer.y){
if(rightDistance<=upDistance){
killer.goRight();
}else{
killer.goUp();
}
rigesha.move = false;
continue;
} if(rigesha.x>=killer.x&&rigesha.y>=killer.y){
if(rightDistance<=downDistance){
killer.goRight();
}else{
killer.goDown();
}
rigesha.move = false;
continue;
} if(rigesha.x<=killer.x&&rigesha.y>=killer.y){
if(leftDistance<=downDistance){
killer.goLeft();
}else{
killer.goDown();
}
rigesha.move = false;
continue;
} } void caculaterLine(){
rigeshaX = rigesha.x;
rigeshaY = rigesha.y;
killerX = killer.x;
killerY = killer.y;
} float xORy(x,y){
float S = x*killerY + killerX*rigeshaY + rigeshaX*y - x*rigeshaY - killerX*y - rigeshaX*killerY;
if(S<0){S = -S;}
float lengthDI = sqrt((killerX-rigashaX)*(killerX-rigashaX)+(killerY-rigashaY)*(killerY-rigashaY))
distance = S/lengthDI;
return distance;
}
AI简单平移追踪算法的更多相关文章
- Unity人工智能学习—确定性AI算法之追踪算法二
转自:http://blog.csdn.net/zhangxiao13627093203/article/details/47658673 上一篇讲到了追踪算法的比较简单的形式,看上去比较假,因为AI ...
- 让AI简单且强大:深度学习引擎OneFlow技术实践
本文内容节选自由msup主办的第七届TOP100summit,北京一流科技有限公司首席科学家袁进辉(老师木)分享的<让AI简单且强大:深度学习引擎OneFlow背后的技术实践>实录. 北京 ...
- 浅谈压缩感知(九):正交匹配追踪算法OMP
主要内容: OMP算法介绍 OMP的MATLAB实现 OMP中的数学知识 一.OMP算法介绍 来源:http://blog.csdn.net/scucj/article/details/7467955 ...
- 匹配追踪算法(MP)简介
图像的稀疏表征 分割原始图像为若干个\[\sqrt{n} \times \sqrt{n}\]的块. 这些图像块就是样本集合中的单个样本\(y = \mathbb{R}^n\). 在固定的字典上稀疏分解 ...
- html5游戏-追踪算法
追踪算法的原理:目标位置 - 当前位置 / 速度,即: dx = targetX - currentX / speed, dy = targetY - currentY / speed var get ...
- 非刚性图像配准 matlab简单示例 demons算法
2011-05-25 17:21 非刚性图像配准 matlab简单示例 demons算法, % Clean clc; clear all; close all; % Compile the mex f ...
- 如何简单解释 MapReduce算法
原文地址:如何简单解释 MapReduce 算法 在Hackbright做导师期间,我被要求向技术背景有限的学生解释MapReduce算法,于是我想出了一个有趣的例子,用以阐释它是如何工作的. 例子 ...
- 简单的PHP算法题
简单的PHP算法题 目录 1.只根据n值打印n个0 2.根据n值打印一行 0101010101010101010101…… 3.根据n值实现1 00 111 0000 11111…… 4.根据n值实现 ...
- 冒泡排序算法和简单选择排序算法的js实现
之前已经介绍过冒泡排序算法和简单选择排序算法和原理,现在有Js实现. 冒泡排序算法 let dat=[5, 8, 10, 3, 2, 18, 17, 9]; function bubbleSort(d ...
随机推荐
- 布局分析002:入门级的CSS导航弹出菜单
这种弹出菜单非常有意思,也有记录的意义,甚至可以说,掌握了这种弹出菜单,基本上CSS掌握的差不多. 主要涉及下面三个重要知识: CSS的继承性质. relative absolute定位. 子选择符& ...
- loadrunner - 问题汇总及解决方案(持续更新)
1.在此界面点击Run Load Tests提示: ”Can not save the license information because access to the registry is de ...
- ZOJ2256 Mincost 2017-04-16 19:36 44人阅读 评论(0) 收藏
Mincost Time Limit: 2 Seconds Memory Limit: 65536 KB The cost of taking a taxi in Hangzhou is n ...
- Layout布局源码浅析之——FrameLayout
一直想研究下安卓各种布局控件,FrameLayout是安卓最简单的界面布局,所以就从FrameLayout讲起. 1.属性.frameLayout继承ViewGroup,除了拥有ViewGroup的属 ...
- MFC中的一般经验之谈3
Window消息可以分为三类:(1)标准Window消息(CWnd子类处理),(2)控制通知消息(CWnd子类处理),(3)命令消息(应用中的5类都可以).所有派生自CCmdObjec对象的类都可以处 ...
- network_node:host解决Docker容器化部署微服务出现的Dobbo通信问题
在Docker中,有时候出现 ports: - 20880:20880 Dobbo通信出现问题. 此时应该改成 network_node:host 注释 ports!
- 生成Webservice的两种方式(Axis2,CXf2.x)
一天之中,用了各种方式生成webservice,就是为了node.js能和程序顺利通信.最终还是用axis2成功了.工作基本完成了,现在可以总结一下. 关于生成方式,推荐使用eclipse,比较方便, ...
- IIS 8 nodejs + iisnode 配置
最近再Server 2012 + IIS 8 中配置NodeJS 运行环境,具体配置过程就不细说了(随便搜搜一堆),安装完nodejs 和 iisnode 之后,出现一个报错,如下: The iisn ...
- 分布式流式计算平台——S4
本文是作者在充分阅读和理解Yahoo!最新发布的技术论文<S4:Distributed Stream Computing Platform>的基础上,所做出的知识分享. S4是Yahoo! ...
- trace sql log
C:\Windows\system32>cd /d d:\PSSDIAG\pssd_2k12_x64 d:\PSSDIAG\pssd_2k12_x64>pssdiag.cmd 2014/ ...