将一条线从两个点延伸到一定长度
Extending a line to a certain length from 2 points
我正在使用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
,不传递方向信息,正确地产生除以零)。
相关文章:
- 可以将两个相同类型的连续数组视为一个数组吗?
- 高级选择排序 - 在一次迭代中搜索两个元素
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 如何更好地检查两个 char 变量是否在一组值中?
- 是否有一种标准方法来计算两个 asctime() 值之间的天数
- 如何在 Win32 中用一条线连接 2 个文本框?
- 我的字符串数组一次打印出前两个字符串
- 我想创建一个嵌套数组,该数组由另一个数组中的所有元素组成,但分为两个
- 打印两个反向空心矩形,然后在其内部打印两条对角线
- 如何快速创建一组覆盖两个图像的图像
- 无法使用两个包装不同下一层的ssl_stream编译代码
- 如何在两个不同的命名空间(但只写一次)中使用相同的标头定义,命名空间有不同的实现?
- 在编译时将两个或多个不同大小的数组合并为一个数组
- 查找两个正方形是否共享一条边
- OpenGL:在两个元素之间画一条线
- 在一条UDP消息中发送两个数据块,而不复制数据块
- 当添加一条边时,使提升图仅包含两个顶点
- 将一条线从两个点延伸到一定长度
- 从N个2D点返回点对,其中每两个点定义一条直线
- 一个"2D fft"和两个一维fft一样吗?