c++ - 将一条线从2个点延长到一定长度

标签 c++ line segment

我正在使用 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,不传达任何方向信息并且正确地屈服除以零)。

关于c++ - 将一条线从2个点延长到一定长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17761364/

相关文章:

c++ - C++中如何使用 `cin`暂停程序10秒

c++ - 获取进程的基地址

bash - 获取物理键盘布局

c++ - 代码、静态、堆栈和堆段实现

linux - 如何从可执行文件中获取段地址并找到堆栈地址

无法理解读取系统调用的行为

c++ -::GetPrivateProfileString 读取 INI 文件的整个部分

c++ - MSVC 上的 NULL 行为

Java Graphics.drawLine() 不精确 : drawn lines are too long

php - 使用 php 正则表达式查找包含单词的整行