2012-03-07 122 views
0

我試圖創建一個算法來找到一個圓上的切線,以便我可以計算該圓與物體發生碰撞時的反射角。我知道圓心和半徑的x和y值。我也有與其他對象的影響點的x和y值。任何關於如何計算使用Java庫的切線的幫助都很好,或者如果有人對如何計算反射角度有任何建議,我們將會感激。謝謝。從圓上的點計算切線?

+0

那麼,你在問如何找到切線方程? – noMAD 2012-03-07 21:33:53

+2

如何處理紙張和鉛筆? – 2012-03-07 21:34:28

+0

那麼,我想這可能是一個答案是的,但有沒有什麼方法可以讓Java庫更容易地做我正在做的事情?此外,我所做的整個事情是計算這個反射角度的好方法。 – John 2012-03-07 21:36:31

回答

2

從我的理解,你實際上想要計算圓的入射角。爲此,您需要知道圓的運動角度以及它反彈的表面的角度;無論圓的碰撞角度如何,碰撞點都是相同的,因爲碰撞點是相同的。如果你有這個角度,那麼這個圓的新角度由(360 - circle's angle + (surface's angle * 2)) % 360給出。我懷疑你跟蹤了圓的移動角度,儘管你可能已經有兩個變量來描述它的移動,也許是沿着這樣一條線:「對於每一次更新,移動圓圈dx單位和dy個單位」。如果你有這個,你可以用(180/π) * arctan(dy/dx)來計算圓的角度。這個公式可以工作,因爲dy/dx給出了平面上圓的運動所產生的線的斜率。一旦我們有了斜率,我們就取它的反正切(arctan),以弧度給出它的角度。最後,我們將該角度轉換爲180/π部分的度數。

這也適用於如果我們使用表面的斜率。假設表面是從點(x1, y1)開始並結束於點(x2, y2)的線。表面的斜率可通過(y1 - y2)/(x1 - x2)找到。然後我們可以像之前一樣應用公式,替換曲面的斜率,如下所示:(180/π) * arctan((y1 - y2)/(x1 - x2))

現在,您已經擁有圓和曲面,並且可以應用上面的第一個公式。

+0

是的,謝謝。這正是我的意思。雖然我對錶面的角度有些困惑,但我的意思是,將使用什麼來代替dy和dx來計算其角度? – John 2012-03-07 23:20:10

+1

你基本上需要找到表面的斜率。假設曲面是一條從'(x1,y1)'點開始併到'(x2,y2)'點的線。那麼'dy = y2 - y1'和'dx = x2 - x1'。 – justinrstout 2012-03-07 23:33:57

+0

謝謝。如果碰撞位於角落,表面斜率是碰撞點處圓的切線?如果是的話,我應該如何讓dy和dx離開這個斜坡? – John 2012-03-07 23:45:13