点乘应用

image.png

已知条件

已知玩家目标A目标B的坐标
已知玩家朝前向量(forward)玩F(局部坐标轴的X方向)

分别求取玩家分别与向量A、向量B的夹角αβ

求解

向量减法可得
玩家目标的向量,到A到B

到A = 目标A坐标 - 玩家坐标
到B = 目标B坐标 - 玩家坐标
image.png
分别对 到A到B向量进行归一化操作
Normal(到A) = 到A÷|到A|
Normal(到B) = 到B÷|到B|

玩家朝前向量(forward)
玩F 默认已经归一化了 | | | 使用点乘运算:|A||B|cosα = xaxb + yayb
|玩F| * |Normal(到A)| * cosα = x**F**xNormal(到A) + y**F**yNormal(到A)
|玩F| * |Normal(到B)| * cosβ = x**F**xNormal(到B) + y**F**yNormal(到B)
衍生结果:
当夹角大于90° 点乘结果小于0
当夹角等于90°点乘结果等于0
当夹角小于90°点乘结果大于0

由于向量都已经归一化(即模长为1),所以余弦函数
cosα = x**F**xNormal(到A) + y**F**yNormal(到A)
cosβ = x**F**xNormal(到B) + y**F**yNormal(到B)

| | | 由反三角函数可得角度
α = arccos(cosα
β = arccos(cosβ
| |

UE4实际操作

image.png

操作注意事项

注意:可以通过【DrawDebugArrow】来连接2坐标点
image.png
注意:
可以给角色添加一个箭头组件方便观察
image.png

黄色连线和红色箭头的夹角
序列 05_2.gif