如何获得与另一个受角度限制的矢量方向相同的 3D 矢量?

问题描述 投票:0回答:1

如果我有两个 3D 向量,如下图中的蓝色和红色向量所示,其中红色向量与蓝色向量的角度超过 20 度,我如何计算一个新向量(示例中为绿色) )与蓝色正好 20 度,与红色方向相同?它不需要与红色的长度相同,理想情况下它是一个单位(归一化方向)向量。如果任意角度限制是一个名为 x 的变量,我该怎么做?

Example image

对于上下文:我正在制作一款视频游戏,我可以获取玩家瞄准的位置,并绘制从武器枪口到玩家瞄准位置的线迹。但是,如果此 Linetrace 与武器指向的实际方向偏离超过 x 度,我希望武器向玩家瞄准的方向发射 x 度,这样它就不能只是向侧面射击。

如果您能够以虚幻引擎 5.x 蓝图的形式给出答案,那就太棒了,但没有必要。我可以自己将纯数学转换为蓝图。

math vector 3d unreal-engine5 unreal-blueprint
1个回答
0
投票

据我了解这个问题,

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
© www.soinside.com 2019 - 2024. All rights reserved.