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. CentOS 最新版的下载地址 + 版本选择详解

    CentOS 最新版的下载地址 + 版本选择详解 发现越来越多的机关单位.事业单位开始使用 Linux 作为主要服务器,毕竟,Linux的稳定性和高效性是众所周知的,所以我也打算把自己这一块技术加强一 ...

  2. Myeclipse的webservice本地监听设置(一个简陋的代理)

    (1) 首先打开Myeclipse,然后选择window--->show view ---->other (2)搜索tcp,然后找到如图的样式 (3)选中,点击ok (4)弹出下图界面 ( ...

  3. 在Word 中撰写并发布到博客的帮助

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

  4. PHP中刷新输出缓冲详解[转载]

    PHP中刷新输出缓冲详解 分类: PHP Web开发2011-07-23 17:42 1795人阅读 评论(0) 收藏 举报 phpbuffer浏览器outputapache模块脚本 buffer是一 ...

  5. linux每天一小步---ls命令详解

    1 命令功能: 列出当前目录下或者指定目录下的所有文件和目录,ls是list的缩写. 2 命令语法: ls [选项] [目录名]     #注:[]中的内容为非必选项 3 命令选项: -a 列出目录下 ...

  6. ios中改变UIImagePickerController页面的button的文字为中文

    可以在工程中直接 project-->info-->Localization native development region   赋值为 zh_CN

  7. ASP.NET Core2调用Azure云上的PowerBI报表展示

    在开发企业应用中,报表功能是当之无愧的重头戏,如何将数据通过合适的报表呈现出来成为每个项目人员必需面临的问题.而找到一款合适的报表往往都需要考率价格.开发.风格.支撑等因素.那么,我在这里给大家介绍一 ...

  8. ansible常用ad hoc操作

    ansible group001 -i hosts.ip -m shell -a -v

  9. 查找 SQL SERVER 所有表记录数

    -- 所有表的记录数 SELECT a.name, b.rowsFROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.idWHERE ...

  10. zTree设置选中节点之后出现重复节点

    1.用户离开页面时最后一次点击的节点信息我会保存到数据库. 2.用户打开页面时默认选中上一次离开时选中的节点. 现在发现在设置选中节点之后,会出现重复的节点(重复现象偶尔出现). 以下是代码: var ...