国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

快速移動目標的瞄準算法和程序?qū)崿F(xiàn)

2016-10-10 03:14:43謝吉剛
電子測試 2016年17期
關鍵詞:火炮炮彈拋物線

謝吉剛

(南京工業(yè)職業(yè)技術學院計算機與軟件學院,江蘇南京,210023)

快速移動目標的瞄準算法和程序?qū)崿F(xiàn)

謝吉剛

(南京工業(yè)職業(yè)技術學院計算機與軟件學院,江蘇南京,210023)

在塔防游戲中,對于飛機等快速移動且距離較遠的目標,火炮直接向目標射擊是不可能命中的。本文在分析炮彈和飛機的運動情況的基礎上,提出逐次迭代逼近的方法求解命中點,并將世界坐標系轉(zhuǎn)換到火炮坐標系以簡化求解過程,使火炮能夠快速指向命中點,最后文章給出了主要的程序?qū)崿F(xiàn)步驟。

瞄準;迭代;坐標變換

在一般塔防游戲中,常有大炮跟隨目標自動瞄準的設計。在Unity中有l(wèi)ook at腳本,即火炮始終指向目標,開火時直接朝目標點射擊。該腳本在地面近距離、目標移動速度慢時有很高的命中率。但是如果是模擬飛行射擊游戲,由于飛機飛行速度快,大炮與飛機距離比較遠,重力影響也比較大,這時就很難命中目標,需要對瞄準程序進行改寫。下面以飛機作勻速直線運動為前提,具體討論該問題的處理方法。

1 飛機和炮彈的運動情況

如圖1,火炮位置為T,飛機初始位置為P已知,H為預計命中點。飛機飛行方向和飛行速度vP已知,炮彈出膛速度vT已知,這時炮彈將會作拋物線運動。

此時飛機的運動方程為:

xP=xP0+vPxt

yP=yP0+vPyt

zP=zP0+vPzt

炮彈的運動方程為:

xT=xT0+vTxt

yp=yT0+vTyt-

zp=zT0+vTzt

其中g為重力加速度,t為飛行時間。

圖 1 飛機和炮彈的運動示意圖

2 算法設計

這是個非齊次非線性隱含微分方程組,用常規(guī)的迭代逼近求解,迭代的過程大致思路如下:首先預測一個可能得命中位置,一般可以選飛機的初始位置為第一個預測命中位置,計算炮彈飛到該位置的時間t和發(fā)射角θ。根據(jù)該時間計算飛機在該時刻的實際位置,然后以該位置作為第二次的預測值再次計算,以此使炮彈落點不斷逼近飛機位置,直到兩者差距小于某一個特定值。該算法流程圖如圖2。

圖 2 算法流程圖

考慮到拋物線本身是一個2D曲線,做一個坐標變換,每一次迭代將世界坐標系將變換為以火炮位置為原點,x軸正向指向預測命中點的火炮坐標系,即可將問題簡化為只考慮X,Y方向的2D問題。發(fā)射角只要計算火炮與x軸的夾角θ,待算出最后結果后再轉(zhuǎn)換回世界坐標系即可。如圖3,虛線描述的是火炮坐標系,實線為世界坐標系。

圖 3 坐標變換圖

變換后的拋物線方程可以改寫為:

代入后得出

求解得出:

這樣發(fā)射角θ就可以通過預測的落點坐標、炮彈初速度、重力加速度g來求出。

3 實現(xiàn)方法

下面例舉出炮彈實例的生成和坐標變換的主要代碼。具體實現(xiàn)過程主要是數(shù)學公式的實現(xiàn),此處從略。

3.1生成炮彈實例

首先在Unity中制作預制剛體——炮彈,命名為shell_ prb。如果方程有解,也就是炮彈可能命中的情況下生成該實例。

if(hitPoint != Vector3.zero){

GameObject obj = (GameObject)Instantiate(shell_ prb,gun.transform.position,Quaternion. LookRotation(hitPoint));

3.2坐標變換

構造一個以炮塔為原點,以重力方向為-y軸 以炮塔正前方為X軸的標準拋物線2D坐標系,再構造從世界坐標到炮塔坐標的旋轉(zhuǎn)矩陣,最后計算相對坐標差,再旋轉(zhuǎn)到炮塔當前坐標,完成世界坐標系到火炮坐標系的變換。

Vector3 gunDirection = new Vector3(hitPoint. x,gunPosition.y,hitPoint.z) - gunPosition;

Quaternion gunRotation = Quaternion.FromToRatation(gunDirection,Vector3.forward);

Vector3 localHitPoint = gunRotation * (hitPoint -gunPosition);

float V = gunVelocity;

float X = localHitPoint.z;

float Y = localHitPoint.y;

4 結束語

實驗表明,本算法在幾千米范圍以內(nèi)的飛機,飛行速度在幾百千米每小時,炮彈出膛速度在幾百米每秒,命中精度10m以內(nèi)的前提下,基本上4-6次迭代以內(nèi)可以完成,能夠達到應有的響應速度,另外如果采用無重力情況下的直線彈道計算出來的命中點為首次預測點,能夠使迭代效率更高。在此基礎上如果再考慮進空氣阻力、飛機的變速飛行等因素的影響,就可以簡單的實現(xiàn)軍事仿真系統(tǒng)。

[1] 宣雨松. Unity 3D游戲開發(fā)[M]. 北京:人民郵電出版社2012,6: 176-178

[2] 劉光然. 虛擬現(xiàn)實技術[M] . 北京:清華大學出版社2011,1:22-24

[3] 同濟大學數(shù)學系. 高等數(shù)學[M]. 北京:高等教育出版社2007,4:323-325

[4] Michelle Menard(美)著 史曉明,李強 譯. Unity游戲開發(fā)實戰(zhàn)[M]. 北京:機械工業(yè)出版社 2012,4:89-90

Realization of Algorithm and Program to Aim at the Quickly-moving Object

Xie Jigang
(Nanjing Institute of Industry Technology,Nanjing 210023,China)

In tower defense game,it’s impossible for the artillery to hit directly the objects which are moving quickly and in faraway distance such as aircraft.Based on the analysis of artillery and aircraft movement,the article put forward the method of successive iteration approximation to get the impact point,as well as the transformation from the world coordinate system to artillery coordinate system to simplify the solution process.Using this method,the artillery can quickly point to the impact point.This article also gives the implementation steps of main programs.

aim at;iteration;coordinate transformation

謝吉剛(1975-),男,四川內(nèi)江人,南京工業(yè)職業(yè)技術學院,副教授,理學碩士。主要研究方向:計算機多媒體技術。

基于Unity 3D的角色扮演游戲設計與開發(fā),南京工業(yè)職業(yè)技術學院2014年度重點科研課題(編號: YK14-04-06)

猜你喜歡
火炮炮彈拋物線
選用合適的方法,求拋物線的方程
樹上長“炮彈”
巧求拋物線解析式
火炮也減肥
裝填炮彈
“炮彈”表妹
拋物線變換出來的精彩
玩轉(zhuǎn)拋物線
騎炮彈飛行
陸戰(zhàn)之神——火炮
城市| 卢湾区| 波密县| 隆子县| 城市| 南郑县| 百色市| 景泰县| 巴彦县| 清徐县| 铜川市| 宝清县| 玉树县| 鄢陵县| 益阳市| 定边县| 特克斯县| 都昌县| 枣阳市| 北海市| 萨迦县| 商城县| 筠连县| 永德县| 广西| 新巴尔虎右旗| 青岛市| 昔阳县| 崇明县| 五峰| 烟台市| 屏东市| 兖州市| 缙云县| 尼玛县| 禄劝| 行唐县| 襄汾县| 海兴县| 文化| 方正县|