2015-11-20 19 views
0

我只是在處理一些東西,因爲我知道它比任何其他語言都好,並且偶然發現在這個網站上Custom 2d physics engine。到現在爲止還挺好。我在我有2個矩形碰撞的地步,我需要解決碰撞。根據論文我應該使用的代碼:試圖在java中使用C++創建一個物理引擎紀錄片

void ResolveCollision(Object A, Object B) 
{ 
    // Calculate relative velocity 
    Vec2 rv = B.velocity - A.velocity 

    // Calculate relative velocity in terms of the normal direction 
    float velAlongNormal = DotProduct(rv, normal) 

    // Do not resolve if velocities are separating 
    if(velAlongNormal > 0) 
    return; 

    // Calculate restitution 
    float e = min(A.restitution, B.restitution) 

    // Calculate impulse scalar 
    float j = -(1 + e) * velAlongNormal 
    j /= 1/A.mass + 1/B.mass 

    // Apply impulse 
    Vec2 impulse = j * normal 
    A.velocity -= 1/A.mass * impulse 
    B.velocity += 1/B.mass * impulse 
} 

這是用C++編寫的,所以我需要將它移植到java。在這裏,我陷入了兩件事。 1:作者用「正常」來表示什麼?我如何獲得「正常」?事情2是這3行代碼:

Vec2 impulse = j * normal 
    A.velocity -= 1/A.mass * impulse 
    B.velocity += 1/B.mass * impulse 

他創建一個向量只有一個數字? j *正常嗎? 我真的沒有清楚地瞭解究竟發生了什麼事情,這對我沒有任何好處。

+0

如果你不知道什麼是正常的矢量,這不是一個真正的編程問題:你應該對正在建模的數學做一些背景閱讀。 http://mathworld.wolfram.com/NormalVector.html –

+0

正常在其他地方定義。搜索對象或任何'全局' – JFPicard

+0

「自定義3D物理引擎」 - >您鏈接到一個名爲「如何創建自定義2D物理引擎」的頁面。 –

回答

0

他可能是指this爲「正常」。所以正常的是一個有2個元素的矢量,因爲你指的是2D物理教程。並j*normal將乘以normal的每個元素與標量j

normal,velocityimpulse是具有座標x,y的2個元素的向量。從您所指的一系列教程中,您可以看到正常定義的here

+0

謝謝!清理了一些東西! – user1586195

0

在2D或3D形狀的邊界上的點的「正常」的向量是作爲矢量:

  1. 垂直於該點處的邊界;
  2. 長度爲1;和
  3. 點向外而不是形狀

法向矢量是相同的沿着一條直線(2D)或平面(3D),因此你也會聽到人們談論的「正常」內在這些情況下的線或表面。

法向矢量用於圖形和物理代碼中的各種重要計算。

如何精確計算點,線或面的法向量取決於代表對象幾何的數據結構。

+0

好吧,這是我的正常嗎? 'PVector normal = new PVector( - (B.pos.y-A.pos.y),(B.pos.x-A.pos.x));' – user1586195

+0

對不起,這不太對。 *如果你的物體是圓的*,那些是中心位置,那麼接觸點的法線是(B-A)/距離(A,B)。這可能是因爲你的物理引擎正在簡化這個假設。 –