Unity 通过向量点乘叉乘判断方位

举报
CoderZ1010 发表于 2022/09/25 06:02:40 2022/09/25
【摘要】 点积的计算方式为:a*b = |a| * |b| cos<a,b> 其中|a|和|b|表示向量的模,<a,b>表示两个向量的夹角。通过点积可以判断一个物体在另一个物体的前方还是后方。 using UnityEngine; public class Foo : MonoBehaviour{ //创建两个物体...

点积的计算方式为:a*b = |a| * |b| cos<a,b> 其中|a|和|b|表示向量的模,<a,b>表示两个向量的夹角。通过点积可以判断一个物体在另一个物体的前方还是后方。


  
  1. using UnityEngine;
  2. public class Foo : MonoBehaviour
  3. {
  4. //创建两个物体A和B
  5. public Transform A;
  6. public Transform B;
  7. //点积结果
  8. private float dot;
  9. private void Update()
  10. {
  11. Vector3 direction = B.position - A.position;
  12. dot = Vector3.Dot(direction.normalized, A.forward);
  13. }
  14. private void OnGUI()
  15. {
  16. //点积结果大于0表示物体B在物体A的前方 否则在后方
  17. GUILayout.Label($"B在A的{(dot > 0 ? "前方" : "后方")}", "Box");
  18. }
  19. }

叉积的性质:

        1.c垂直于a,c垂直于b,即向量c垂直于向量a、b所在的平面

        2.模长|c| = |a| * |b| sin<a,b>

        3.满足右手法则。a * b != b * a 而 a * b = - b * a

可以使用叉积来判断一个物体在另一个物体的左方还是右方。


  
  1. using UnityEngine;
  2. public class Foo : MonoBehaviour
  3. {
  4. public Transform A;
  5. public Transform B;
  6. private Vector3 cross;
  7. private void Update()
  8. {
  9. Vector3 direction = B.position - A.position;
  10. cross = Vector3.Cross(direction.normalized, A.forward);
  11. }
  12. private void OnGUI()
  13. {
  14. GUILayout.Label($"B在A的{(cross.y > 0 ? "左方" : "右方")}", "Box");
  15. }
  16. }

文章来源: coderz.blog.csdn.net,作者:CoderZ1010,版权归原作者所有,如需转载,请联系作者。

原文链接:coderz.blog.csdn.net/article/details/120687823

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。