2013-07-20 58 views
0

我正在C++中使用SFML和Box2D庫製作平臺遊戲。玩家有手槍,我正在嘗試拍攝。從2點延長線到一定長度

Box2D具有RayCast功能,需要兩個位置來檢查兩者之間的交點。 我有玩家位置和鼠標位置。目前這兩條線之間的檢查並不理想。

我需要第三個位置,這是手槍射擊結束的位置。 玩家位置和第三個位置之間的距離應該始終爲1000.

回答

5

數學很簡單。考慮下面的線,A和B是你的已知點(A爲段,即起源您的播放器)和C是你正在尋找第三點:

A-----------B------------C 
(Xa,Ya)  (Xb,Yb)  (Xc,Yc) 

現在距離:

AB = sqrt((Xb - Xa)² + (Yb - Ya)²) 
AC = 1000 

叉乘得到XC:

AB -> Xb - Xa 
AC -> Xc - Xa 

Xc - Xa = AC * (Xb - Xa)/AB 
Xc = Xa + (AC * (Xb - Xa)/AB) 

同樣,Yc = Ya + (AC * (Yb - Ya)/AB)

請注意,如果C位於A和B之間,則這也適用,如果A和B是相同的點(僅顯示)限制(AB = 0,不傳送方向信息並正確產生零除)。

+0

謝謝兄弟! :d –