2010-11-23 60 views
1

好的我正在嘗試使用c#/ java獲取遊戲池遊戲。游泳池/檯球觸發器

  • start =背面池線索(X,Y)的
  • end池線索(X,Y)的=前
  • circles球(X,Y,R)的=列表

所以,每次你移動你的鼠標我更新start,end然後我循環檢查是否相交。那麼這是我的問題,我需要弄清楚如果我在交叉點擊中它會發生什麼事情(它會直接向下)。

我該怎麼做。我看了谷歌上的一些例子,但只能找到他們用矢量做這個例子,並以這種方式在我的頭上......

我的第一個想法是得到池角的角度和圓圈中點繪製一條線相同的角度,但由於某種原因,這是錯誤的。這可能是我的GetEnd功能

public Point GetEnd(Point start, double angle, int len) 
    { 
     double y = start.Y + (len * Math.Sin(angle)); 
     double x = start.X + (len * Math.Cos(angle)); 

     return new Point((int)x, (int)y); 
    } 
+13

這類物理*總是*由矢量建模。花一點時間學習基本的線性代數,你需要的東西並不是那麼難。 – Donnie 2010-11-23 14:15:00

回答

0

我想的方向之間的角度在提示點和球移動是:

Math.ASin(a/r) 

a射線之間的最小距離代表的線索和球的中心,並且r球的半徑。

通過最小化lamda的a^2 = (Cue.Position+Cue.Direction*Lamda-Ball.Position)^2獲得a,然後計算該表達式的平方根。

但我懶得重新表達沒有載體的表情。