遊戲開發之二維向量角度計算

最近做android遊戲開發,遇到一些問題,這裏先說向量角度,其用處很大也很廣泛。比如飛機當前飛向的方向、怪獸出擊時候方向等都需要及時計算出其方向和位置。
這裏介紹一種常見遊戲:切水果所用到的方向確認。
一個香蕉飛出來,你滑動手指去擊中它時候,香蕉就被切成兩半。由於,香蕉不像西瓜是圓的,而是長條行的,所以基本有兩種把香蕉切斷的情況 。橫着切,豎着切。那怎麼去計算到底是橫着切還是豎着切呢!
這裏 就要計算出 表示香蕉的向量和你出擊的效果的方向的向量 這兩個向量的夾角。用這個夾角來判斷是否是橫着切 還是豎着切。

下面是代碼:
 public static float TO_DEGREES = ((180/(float)Math.PI));

//計算向量的旋轉的角度0-360
public static int get_vector_Radian (float vector_x, float vector_y){
float lenth = (float) lineDis(0, 0, vector_x, vector_y);
int degree = 0;
        
        if(DEBUG)Log.v("yuyongjun", "get_vector_Radian 9999999999999  vector_x="+vector_x +"vector_y="+vector_y);
if(vector_x > 0 && vector_y >= 0)
{
degree =  (int) (Math.asin(vector_y/lenth) * (TO_DEGREES));
}
else if(vector_x <= 0 && vector_y > 0)
{
degree = (int) (Math.asin(vector_y/lenth) * (TO_DEGREES));
degree = 180 - degree;

else if(vector_x < 0 && vector_y <= 0)
{
degree = (int) (Math.asin((-vector_y)/lenth) * (TO_DEGREES));
degree += 180;
}
else
{
degree = (int) (Math.asin((-vector_y)/lenth) * (TO_DEGREES));
degree = 360 - degree;
}
if(DEBUG)Log.v("yuyongjun", "get_vector_Radian 9999999999999  degree="+degree);
return degree;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章