three.js点乘.dot()判断物体在人前或人后

参考资料:threejs中文网

threejs qq交流群:814702116

three.js点乘.dot()判断物体在人前或人后

通过three.js向量Vector3点乘方法.dot()判断物体在人的前面还是后面。

已知条件

人的正前方沿着z轴负半轴方向

// a向量:人的正前方沿着z轴负半轴
const a = new THREE.Vector3(0,0,-1);

人的位置和物体的位置

person.position.set(0,0,2);//人位置
mesh.position.set(2,0,-3);//物体位置

在这里插入图片描述

创建一个人指向物体的向量

物体坐标减去人坐标,创建一个人指向物体的向量

const b = mesh.position.clone().sub(person.position);

向量夹角与人前后关系判断

// a向量:人的正前方
const a = new THREE.Vector3(0,0,-1);
// 人指向物体的向量
const b = mesh.position.clone().sub(person.position);

物体绕着人360挪动位置,你创建不同位置人指向物体的向量b,你会发现向量b与向量a的夹角处于0~180度之间。

在这里插入图片描述

0 ~ 90度:物体在人的前方,人指向物体的向量b与人正前方向量a夹角处于0 ~ 90之间。

90 ~ 180度:物体在人的后方,人指向物体的向量b与人正前方向量a夹角处于90 ~ 180之间。

0~180度三角函数余弦值规律

  • 0~90度,余弦值大于0
  • 90~180度,余弦值小于0

在这里插入图片描述

总结

在这里插入图片描述

向量a和b夹角,在0~180度的范围内的前提下:

当a和b点乘a.dot(b)大于0,意味着cos(θ)大于0,cos(θ)大于0意味着夹角θ是090度,θ是090度说明物体在人的前方。

a和b点乘a.dot(b)小于0,意味着cos(θ)小于0,0180度的范围内,cos(θ)小于0,意味着夹角θ是90180度,θ是90~180度说明物体在人的后方。

const dot = a.dot(b);//向量a和b点乘
if (dot > 0) {
    console.log('物体在人前面');
} else if (dot < 0) {
    console.log('物体在人后面');
}

调整物体到人后面测试代码

调整物体挪到人后面测试代码判断是否正确

mesh.position.set(2, 0, 5);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Threejs可视化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值