从2点将线延伸到一定长度

时间:2013-07-20 10:39:58

标签: c++ line segment

我正在使用SFML和Box2D库在C ++中制作平台游戏。 玩家有一把手枪,我正在尝试实施射击。

Box2D具有RayCast功能,需要两个位置来检查两者之间的交叉点。 我有玩家位置和鼠标位置。目前这两行之间的线路检查并不理想。

我需要第三个位置,即手枪射击结束的位置。 玩家位置和第三个位置之间的距离应始终为1000。

1 个答案:

答案 0 :(得分:4)

数学非常简单。考虑以下几行,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,则不传达方向信息并且正确地产生除零值)