2011-12-22 50 views
1

好的,我有這種算法應該檢測用戶在iPad的屏幕上繪製的球和線之間的碰撞。代碼很簡單:移動的球和線之間的碰撞

for (int i = 1; i < currentPlatform; i++) { 
     float x1 = xStart[i] -xBall; 
     float y1 = yStart[i] - yBall; 
     float x2 = xEnd[i] - xBall; 
     float y2 = yEnd[i] - yBall; 

     float dx = x2 - x1; 
     float dy = y2 - y1; 
     float dr = sqrtf(powf(dx, 2) + powf(dy, 2)); 
     float D = x1*y2 - x2*y1; 

     float delta = powf((ball.frame.size.height/2), 2)*powf(dr, 2) - powf(D, 2); 

     NSLog(@"%f", delta); 

     if (delta >= 0) { 
      iDir = (((ballVelocity*(sin(angle[i])))*-1)*kRestitution);//*sin(angle[i])); 
      jDir = (((ballVelocity*(cos(angle[i]))))*kRestitution*cos(angle[i])); 
     } 
    } 

唯一的問題是,球穿過線未被發現!在打印三角洲的控制檯中,它會給出-4萬億美元的瘋狂答案!有沒有人看到我在做這個碰撞檢測的錯誤?

回答

0

我沒有時間嘗試代碼,但可以在用戶繪製時每隔0.05秒添加一個位置標記,將其添加到數組中,然後每次將球移動檢查以查看它是否在標記上。

或者,您可以製作一個貝塞爾曲線或其他可以數學存儲的曲線,然後檢查球的位置是否滿足線的方程。

+0

這可能不是最好的方法,但如果沒有別的工作,那麼爲什麼不嘗試。 – Jordan 2011-12-23 04:03:43