`
micheal19840929
  • 浏览: 162219 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

2D跟踪弹算法

阅读更多

       最近在写一个手机游戏,其中涉及到一个跟踪弹的算法,成果如下:

/*子弹到目标的向量分量*/
int vx=target.getPosition().x-this.position.x;
int vy=target.getPosition().y-this.position.y;
/*使用内积判断向量的夹角[0,180]*/
double dot=Util.dot(dx,dy,vx,vy);//dx,dy为速度向量分量
double cos=dot/velocity*Util.modulus(vx,vy);//velocity为速度标量
double angle=Math.acos(cos);//两向量的夹角
/*使用外积判断向量的夹角是顺时针还是逆时针*/
double cross=Util.cross(dx,dy,vx,vy);
if(angle!=0&&Math.abs(cross)>0.00001)
{
	/*参考偏转角界限进行调整*/
	Point2D result=new Point2D();
	if(angle<deflectionAngleLimit)//deflectionAngleLimit为子弹最大偏转角,即从一帧跳到下一帧最大的旋转角度
	{
		if(cross>0)
		{
			//逆时针旋转
			direction+=angle;
			Util.rotate(dx,dy, angle, result);
			Log.d("TrackingBullet","ccw angle:"+angle+",direction:"+direction);
		}
		else if(cross<0)
		{
			//顺时针旋转
			direction-=angle;
			Util.rotate(dx,dy, -angle, result);
			Log.d("TrackingBullet","cw angle:"+angle+",direction:"+direction);
		}
	}
	else
	{
		if(cross>0)
		{
			//逆时针旋转
			direction+=deflectionAngleLimit;
			Util.rotate(dx,dy, deflectionAngleLimit, result);
			Log.d("TrackingBullet","ccw limit:"+deflectionAngleLimit+",direction:"+direction);
		}
		else if(cross<0)
		{
			//顺时针旋转
			direction-=deflectionAngleLimit;
			Util.rotate(dx,dy, -deflectionAngleLimit, result);
			Log.d("TrackingBullet","cw limit:"+deflectionAngleLimit+",direction:"+direction);
		}
	}
	Log.d("TrackingBullet","dx:"+dx+",dy:"+dy+"--result:"+result.x+","+result.y);
	this.dx=result.x;//新的速度分量
	this.dy=result.y;
}

 

然而其间遇到了一个问题,就是在数学中坐标系统Y分量的正方向是向上的,而手机的坐标系统Y分量的正方向是向下的,根据经验是可能使用y'=-y来转换的,不过在这里还不知道怎么转换,有机会我会再做进一步的研究,也希望有同道中人一起交流^_^

分享到:
评论

相关推荐

    UNITY自动追踪导弹源码

    基于Unity导弹自动追踪算法源代码,相关介绍:https://blog.csdn.net/sdhexu/article/details/77962134

    Java2核心技术.part5

    7.5 2D图形 7.6颜色 7.7为文本设定特殊字体 7.8图像 第8章事件处理 8.1、事件处理基础 8.1.1实例:处理按钮点击事件 8.1. 2建议使用内部类 8.1. 3将组件变成事件监听器 8.1.4实例:改变观感 ...

    Java2核心技术.part3

    7.5 2D图形 7.6颜色 7.7为文本设定特殊字体 7.8图像 第8章事件处理 8.1、事件处理基础 8.1.1实例:处理按钮点击事件 8.1. 2建议使用内部类 8.1. 3将组件变成事件监听器 8.1.4实例:改变观感 ...

    Java2核心技术.part1

    7.5 2D图形 7.6颜色 7.7为文本设定特殊字体 7.8图像 第8章事件处理 8.1、事件处理基础 8.1.1实例:处理按钮点击事件 8.1. 2建议使用内部类 8.1. 3将组件变成事件监听器 8.1.4实例:改变观感 8.1.5实例...

    Java2核心技术.part6

    7.5 2D图形 7.6颜色 7.7为文本设定特殊字体 7.8图像 第8章事件处理 8.1、事件处理基础 8.1.1实例:处理按钮点击事件 8.1. 2建议使用内部类 8.1. 3将组件变成事件监听器 8.1.4实例:改变观感 ...

    Java2核心技术.part4

    7.5 2D图形 7.6颜色 7.7为文本设定特殊字体 7.8图像 第8章事件处理 8.1、事件处理基础 8.1.1实例:处理按钮点击事件 8.1. 2建议使用内部类 8.1. 3将组件变成事件监听器 8.1.4实例:改变观感 ...

    Java2核心技术.part2

    7.5 2D图形 7.6颜色 7.7为文本设定特殊字体 7.8图像 第8章事件处理 8.1、事件处理基础 8.1.1实例:处理按钮点击事件 8.1. 2建议使用内部类 8.1. 3将组件变成事件监听器 8.1.4实例:改变观感 ...

    JAVA上百实例源码以及开源项目

     关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    JAVA上百实例源码以及开源项目源代码

     关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    java开源包1

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包11

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包2

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包3

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包6

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包5

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包10

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包4

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包8

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

Global site tag (gtag.js) - Google Analytics