将一条线从两个点延伸到一定长度

Extending a line to a certain length from 2 points

本文关键字:两个 一条      更新时间:2023-10-16

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

Box2D有一个RayCast函数,它需要两个位置来检查它们之间的交集。我有玩家的位置和鼠标的位置。目前,这两者之间的线路检查并不理想。

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

数学很简单。考虑下面这条线,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,不传递方向信息,正确地产生除以零)。