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简单平移追踪算法的更多相关文章

  1. Unity人工智能学习—确定性AI算法之追踪算法二

    转自:http://blog.csdn.net/zhangxiao13627093203/article/details/47658673 上一篇讲到了追踪算法的比较简单的形式,看上去比较假,因为AI ...

  2. 让AI简单且强大:深度学习引擎OneFlow技术实践

    本文内容节选自由msup主办的第七届TOP100summit,北京一流科技有限公司首席科学家袁进辉(老师木)分享的<让AI简单且强大:深度学习引擎OneFlow背后的技术实践>实录. 北京 ...

  3. 浅谈压缩感知(九):正交匹配追踪算法OMP

    主要内容: OMP算法介绍 OMP的MATLAB实现 OMP中的数学知识 一.OMP算法介绍 来源:http://blog.csdn.net/scucj/article/details/7467955 ...

  4. 匹配追踪算法(MP)简介

    图像的稀疏表征 分割原始图像为若干个\[\sqrt{n} \times \sqrt{n}\]的块. 这些图像块就是样本集合中的单个样本\(y = \mathbb{R}^n\). 在固定的字典上稀疏分解 ...

  5. html5游戏-追踪算法

    追踪算法的原理:目标位置 - 当前位置 / 速度,即: dx = targetX - currentX / speed, dy = targetY - currentY / speed var get ...

  6. 非刚性图像配准 matlab简单示例 demons算法

    2011-05-25 17:21 非刚性图像配准 matlab简单示例 demons算法, % Clean clc; clear all; close all; % Compile the mex f ...

  7. 如何简单解释 MapReduce算法

    原文地址:如何简单解释 MapReduce 算法 在Hackbright做导师期间,我被要求向技术背景有限的学生解释MapReduce算法,于是我想出了一个有趣的例子,用以阐释它是如何工作的. 例子 ...

  8. 简单的PHP算法题

    简单的PHP算法题 目录 1.只根据n值打印n个0 2.根据n值打印一行 0101010101010101010101…… 3.根据n值实现1 00 111 0000 11111…… 4.根据n值实现 ...

  9. 冒泡排序算法和简单选择排序算法的js实现

    之前已经介绍过冒泡排序算法和简单选择排序算法和原理,现在有Js实现. 冒泡排序算法 let dat=[5, 8, 10, 3, 2, 18, 17, 9]; function bubbleSort(d ...

随机推荐

  1. java MD5 并发

    Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321(R.Rives ...

  2. 1 web应用-http协议-web框架

    web 应用 Web 应用程序是一种可以通过 Web 访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件.应用程序有两种模式 C/S.B/S.C/S ...

  3. Gym 101201F Illumination (Two-Sat)

    题意:一个n*n的房子,有很多灯,每个格子只能被上下方向照一次.左右方向照一次,每个灯可以选择上下或是左右照,照明长度以自身位置为中心,占用2*r+1个格子.问能否安排一种方案,使所有格子满足条件. ...

  4. 用Word2007写CSDN博客

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  5. Zookeeper客户端cli_st为何在crontab中运行不正常?

    实践中,发现直接在命令行终端运行cli_st时,能够得到预期的结果,但一将它放到crontab中,则只收到: bye 相关的一段clit_st源代码如下: if (FD_ISSET(, &rf ...

  6. Codeforces 766D Mahmoud and a Dictionary 2017-02-21 14:03 107人阅读 评论(0) 收藏

    D. Mahmoud and a Dictionary time limit per test 4 seconds memory limit per test 256 megabytes input ...

  7. jenkins启动失败,提示Starting Jenkins Jenkins requires Java8 or later, but you are running 1.7.0

    # 背景 centos安装jenkins后,先启动jenkins服务,结果报错如下: 但自己明明已经安装了java8的 # 解决方法 既然安装了java8的话,那么证明是jenkins启动的是还是用的 ...

  8. 基于ASP.NET MVC 利用(Aspose+Pdfobject.js) 实现在线预览Word、Excel、PPT、PDF文件

    #region VS2010版本以及以上版本源码下载地址:http://download.csdn.net/download/u012949335/10231812 VS2012版本以及以上版本源码下 ...

  9. docker为什么适合devops?

    欢迎访问网易云社区,了解更多网易技术产品运营经验 进阶版结论:Kubernetes + Docker 是 Dev 和 Ops 融合的一个桥梁.   DevOps 强调的是高效组织团队之间如何通过自动化 ...

  10. ASP.NET Core使用Ping判断网络是否接通

    static void Main(string[] args) { // 主机地址 string targetHost = "bing.com"; string data = &q ...