如果我有两个 3D 向量,如下图中的蓝色和红色向量所示,其中红色向量与蓝色向量的角度超过 20 度,我如何计算一个新向量(示例中为绿色) )与蓝色正好 20 度,与红色方向相同?它不需要与红色的长度相同,理想情况下它是一个单位(归一化方向)向量。如果任意角度限制是一个名为 x 的变量,我该怎么做?
对于上下文:我正在制作一款视频游戏,我可以获取玩家瞄准的位置,并绘制从武器枪口到玩家瞄准位置的线迹。但是,如果此 Linetrace 与武器指向的实际方向偏离超过 x 度,我希望武器向玩家瞄准的方向发射 x 度,这样它就不能只是向侧面射击。
如果您能够以虚幻引擎 5.x 蓝图的形式给出答案,那就太棒了,但没有必要。我可以自己将纯数学转换为蓝图。
据我了解这个问题,
in the same direction
在这里表示向量Blue
,Read
和Green
是共面的。
所以你可以使用球面线性插值(SLERP)。 标准化向量
B
和 R
,获取它们之间的角度
Ω = acos(B.dot.R)
并构建
G
(此处θ=20 degrees
)
G = B * sin(Ω - θ)/sin(Ω) + R * sin(θ)/sin(Ω)
另一种方法是使旋转轴垂直于
B
和R
并绕其旋转B
(看起来更复杂,但也许你的库有合适的功能)
R = B x R (vector product)
M = matrix to rotate B around R by 20 degrees
G = M * B