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. Oracle物化视图的一般使用

    普通视图和物化视图根本就不是一个东西,说区别都是硬拼到一起的,首先明白基本概念,普通视图是不存储任何数据的,他只有定义,在查询中是转换为对应的定义SQL去查询,而物化视图是将数据转换为一个表,实际存储 ...

  2. 使用Intel的FPGA电源设计FPGA 供电的常用反馈电阻阻值

    使用Intel的FPGA电源设计FPGA 供电的常用反馈电阻阻值. 当前仅总结使用EN5339芯片的方案 Vout = Ra*0.6/Rb + 0.6 芯片手册推荐Ra取348K,则 3.3V时,取R ...

  3. 团队博客第三周(Running Duck队)

    代码链接:Tetris 码云链接 一.需求&原型改进 1.原型改进 汉字方块每次可生成一个并逐渐下落 可通过触摸左右下滑动实现方块的左右移动和快速下滑 左上角按钮可对汉字进行暂时保存和替换 右 ...

  4. Lucene教程(四) 索引的更新和删除

    这篇文章是基于上一篇文章来写的,使用的是IndexUtil类,下面的例子不在贴出整个类的内容,只贴出具体的方法内容. 3.5版本: 先写了一个check()方法来查看索引文件的变化:   /**   ...

  5. Replication--如何使用快照来初始化化请求订阅

    这是一篇针对新人的知识普及文章,老人慎入! 在快照发布和事务发布中,SQL Server需要使用快照来将数据库某一时间点的数据传递给订阅,快照使用BCP的机制. 首先我们需要查看和设置快照的生成目录, ...

  6. Mathout In Action(中文)

    http://download.csdn.net/detail/zxnm55/5593881

  7. Jenkins Pipeline+sonar构建质量平台

    前提: Jenkins JDK 目录: 1.安装sonar插件:SonarQube Scanner for Jenkins 2.安装SonarQube 3.安装sonar-scanner ++++++ ...

  8. Python笔记之format()格式输出全解

    格式化输出:format() format():把传统的%替换为{}来实现格式化输出 使用位置参数:就是在字符串中把需要输出的变量值用{}来代替,然后用format()来修改使之成为想要的字符串,位置 ...

  9. uwp ,win10 post json

    public static async Task<HttpResponseMessage> PostHttpstringrequest(string requesturl,string j ...

  10. php实现循环链表

    <?php /** * php实现链表 * Date: 2018/5/18 * Time: 下午5:59 */ class Node { public $nodeId = 0; public $ ...