利用分離軸定律實現的兩個簡單的自由選擇矩形的碰撞

2021-08-27 16:32:35 字數 1616 閱讀 6912

前幾天寫乙個j2me的2d俯視視角賽車遊戲。賽車用可旋轉的矩形作為碰撞體,先用自由矩形的外接矩形做預計碰撞,然後再用分離軸定律實現真正的碰撞。我把起實現**分享給大家:

/**

* 兩個自由矩形的碰撞檢測 sat(分離軸定律)方法

* * @param rectfree_a

* 自由矩形a

* @param rectfree_b

* 自由矩形b

* @return

*/public static boolean freerectisct(rectfree rectfree_a, rectfree rectfree_b)

scalar_max_b = scalar_proj_b[0];

scalar_min_b = scalar_proj_b[0];

for (int j = 1; j < 4; j++)

vector2 vector_proj_a = new vector2[4];

//再對矩形a進行同樣的計算

vector_proj_a[0] = axis_proj[i].mult(axis_proj[i]

.dotproduct(rectfree_a.ver_a.add(v_translate.negative()))

/ axis_proj[i].dotproduct(axis_proj[i]));

vector_proj_a[1] = axis_proj[i].mult(axis_proj[i]

.dotproduct(rectfree_a.ver_b.add(v_translate.negative()))

/ axis_proj[i].dotproduct(axis_proj[i]));

vector_proj_a[2] = axis_proj[i].mult(axis_proj[i]

.dotproduct(rectfree_a.ver_c.add(v_translate.negative()))

/ axis_proj[i].dotproduct(axis_proj[i]));

vector_proj_a[3] = axis_proj[i].mult(axis_proj[i]

.dotproduct(rectfree_a.ver_d.add(v_translate.negative()))

/ axis_proj[i].dotproduct(axis_proj[i]));

float scalar_proj_a = new float[4];

for (int j = 0; j < 4; j++)

scalar_max_a = scalar_proj_a[0];

scalar_min_a = scalar_proj_a[0];

for (int j = 1; j < 4; j++)

//碰撞判斷(分離軸定律,有任何乙個軸使兩個凸多邊形頂點的投影沒有出現交錯即兩個多邊形沒有相交)

if (scalar_min_a > scalar_max_b || scalar_max_a < scalar_min_b)

return false;

} return true;

}

有關並行的兩個重要定律

使用並行程式處於兩個目的。第一,為了獲得更好的效能 第二,由於業務模型的需要,確實需要多個執行實體。一 amdahl定律 amdahl定律是電腦科學中非常重要的定律。它定義了序列系統並行化後的加速比的計算公式和理論上限。加速比定義 加速比 優化前系統耗時 優化後系統耗時 即,所謂加速比,就是優化前的...

egret判斷兩個多邊形是否相交 分離軸定律

預備知識 向量的點積 關於向量的知識這裡不再贅述 概念 通過判斷任意兩個凸多邊形在任意角度下的投影是否均存在重疊,來判斷是否發生碰撞。若在某一角度光源下,兩物體的投影存在間隙,則為不碰撞,否則為發生碰撞。圖例 在程式中,遍歷所有角度是不現實的。那如何確定投影軸呢?其實投影軸的數量與多邊形的邊數相等即...

兩個簡單的迴圈

1.create or replace procedure pro test 01 is begin for aa in select object name from test 01 loop insert into test 02 values aa.object name end loop e...