2011-11-12 71 views
0

我做了這個應用程序,讓用戶在屏幕上畫一條線,並且球實際上反彈到現實生活中會反彈的角度。但它只能用於一條直線。現在我試圖讓它彎曲。從曲線上彈跳的球iPhone

我已經決定從微積分方法清除腳,因爲涉及的矩陣看起來比需要的更加可怕。我正在做的是在-(void)touchesMoved事件中記錄CGPoint數組中的當前觸摸點。然後爲了找到碰撞,我有一個for循環,如for (int i = 2; i <= numberOfPoints; i++) {,隨着numberOfPoints的增加,它會飛過我的所有值。因此,對於碰撞,我認爲我會得到我和i-1之間的線的斜率,然後得到從球到該線的垂直距離,當它接近零時,發生碰撞,就像我在直線版本中那樣。

但這不起作用。有沒有人有任何提示,以更好的方式來做到這一點?我確實強調了我的所有選項

+0

在這種情況下,您可能希望查看掃描碰撞檢測。考慮你的球可能同時接觸多個線段(想象一個U形線),這會影響反彈。 N的碰撞檢測文檔簡要介紹了這一點:http://www.metanetsoftware.com/technique/tutorialA.html – ravuya

回答

1

使用i和i-1來計算斜率使其過分簡化。我建議:

  1. 加寬兩點之間的距離來計算斜率(例如i和i-4)。原因在於,對於人眼來說,兩個連續點的差別是不可察覺的。眼睛會感覺到略微更遠的點的相同斜率。但是,進一步分開的點可能會爲您提供更準確的斜率。 (i,i-1),(i,i-2),(i,i-3),(i,i + 1)之間的斜率的平均值, (i,i + 2),(i,i + 3)。我覺得這也應該給你一個更好的結果。

如果我是你,我會使用選項2.

您也可以通過選擇一系列點是進一步分開,然後平均的斜坡使用的兩個選項的混合物。

此外,作爲一個側面說明,我假設你知道這個了,但你聽說過的Box2D

編輯:

一件事...如果你能想出一個辦法將用戶的曲線段分成多個直線段,您可以簡單地使用舊算法。