向量的点乘 a·b 和叉乘 a×b
点乘:
点乘, 即|a|·|b|·cosθ, (结果是一个数字)
即: a的长度 * b的长度 * ab的夹角
夹角<90°, 则cosθ>0, 则结果>0
夹角>90°, 则cosθ<0, 则结果<0
那有什么用呢?
答: 判断敌人在我前面还是后面
我向前方发一条射线, 作为向量a
我向敌人发一条射线, 作为向量b
计算点乘结果
如果是正, 即夹角小于90°, 即敌人在我面前180°内
如果是负, 即夹角大于90°, 即敌人在我身后180°内
Vector3 a = me.forward;
Vector3 b = enemy.position - me.position;
float dot = Vector3.Dot(a, b);
if(dot > 0)
{//敌人在我前边
}
还有什么用处呢?
1.求b在a上的投影长度
因为: a·b = |a|·|b|·cosθ
又因为: 投影长度 = |b|·cosθ
则: 投影长度 = a·b ÷ |a|
2.求θ的角度
已知a·b的情况下
cosθ = a·b ÷ |a| ÷ |b|
再用反余弦, 就能求θ的角度
叉乘:
叉乘的结果是个向量
此向量垂直于ab向量所在的平面
冲上或者冲下
用来判断敌人在我左边还是右边
我向前方发一条射线, 作为向量a
我向敌人发一条射线, 作为向量b
叉乘的结果要么冲上, 要么冲下
看y轴的正负就知道是左边还是右边了
Vector3 a = me.forward;
Vector3 b = enemy.position - me.position;
Vector3 cross = Vector3.Cross(a, b);
if(cross.y > 0)
{//敌人在我的......左还是右来着, 忘了
}
叉乘是按照右手定则算的, 而Unity是左手坐标系, 所以结果是相反的, 所以正就是负, 负就是正
(右手定则, 如图, 3个向量相互垂直, 已知其中2个就能确定第3个, 具体是怎么算的, 自己去看百度百科)
其实点乘也可以判左右
//区别就是这次以我的右手方向(me.right)作为向量a
Vector3 a = me.right;
Vector3 b = enemy.position - me.position;
float dot = Vector3.Dot(a, b);
if(dot > 0)
{//敌人在我右边
}
else
{//敌人在我左边
}
在不能转身的2D游戏里一般用不到这些点乘叉乘什么的
如果你在我左边, 则, 你的x必然小于我的x
if(you.position.x < me.position.x)
{//你在我左边
}
以下是从哔哩哔哩<现代计算机图形学入门>看到的
用来判断点是否在三角内
判断点P是否在三角形ABC内:
先做成3个首尾相交的向量AB, BC, CA
先AB×AP, 好, AP在左侧
再BC×BP, 好, 还是BP在左侧
再CA×CP, 好, 还是CP在左侧
好, 都在左侧
证得: P在三角形内
问: 那如果ABC 3个点是顺时针排布的呢?
答: 那就看是否都在右侧
问: 那我们怎么知道他是顺时针还是逆时针呢?
答: 我们不需要知道, 只要是同左或者同右, 就可以判定: 点在三角形内
注意: 还有点P刚好在三角形边上的情况, 那种另外算
注意: 该方法可适用于所有的"凸多边形"
点乘和点乘的矩阵表示:
向量的点乘 a·b 和叉乘 a×b相关推荐
- 向量点乘(内积)和叉乘(外积、向量积)概念及几何意义解读(经典)
声明: 本文转自这里 向量是由n个实数组成的一个n行1列(n*1)或一个1行n列(1*n)的有序数组: 向量的点乘,也叫向量的内积.数量积,对两个向量执行点乘运算,就是对这两个向量对应位一一相乘之后求 ...
- 向量点乘(内积)和叉乘(外积、向量积)的几何意义和作用
参考: https://blog.csdn.net/dcrmg/article/details/52416832 https://blog.csdn.net/qingzhuyuxian/article ...
- 向量点乘(内积)和叉乘(外积)
向量是由n个实数组成的一个n行1列(n*1)或一个1行n列(1*n)的有序数组. 1.向量点乘(内积) 向量的点乘,也叫内积,是对两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量. 1)计算 ...
- 向量点乘(内积)和叉乘(外积、向量积)概念及几何意义(转载)
向量是由n个实数组成的一个n行1列(n*1)或一个1行n列(1*n)的有序数组: 向量的点乘,也叫向量的内积.数量积,对两个向量执行点乘运算,就是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是 ...
- 向量叉积和点积混合运算_【转】向量点乘(内积)和叉乘(外积、向量积)概念及几何意义解读...
[转]向量点乘(内积)和叉乘(外积.向量积)概念及几何意义解读 向量是由n个实数组成的一个n行1列(n*1)或一个1行n列(1*n)的有序数组: 向量的点乘,也叫向量的内积.数量积,对两个向量执行点乘 ...
- 两个向量的点乘和叉乘怎么算_向量点乘(内积)和叉乘(外积、向量积)概念及几何意义解读...
向量是由n个实数组成的一个n行1列(n*1)或一个1行n列(1*n)的有序数组: 向量的点乘,也叫向量的内积.数量积,对两个向量执行点乘运算,就是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是 ...
- Matlab中向量点乘、点积、叉乘计算
点乘 点乘就是将向量的每个元素对应进行相乘的操作 语法:.* 运行:[1 2 3].*[4 5 6] 结果: 点积 点乘是将向量的元素对应相乘后,加起来 语法:dot(x1,x2) 运行: 叉乘 叉乘 ...
- 计算机图形学中向量点乘和叉乘的用途_图形学笔记(一):基础知识
从这便文章开始整理学习到的计算机图像学相关知识,原则是只写我没在网上找到清楚解释的内容,如果有很好的文章介绍相关内容,我会直接把链接贴上. 首先弄清 Computer Graphics和 Comput ...
- 向量叉乘算子、点乘算子与矩阵运算的关系
文章目录 向量叉乘 运算测试 结论 矩阵与向量点乘 变量 算子 测试 结论 向量叉乘 (a×b)×c=b(a⋅c)−a(b⋅c)(a×b)×c = b(a·c) - a(b·c)(a×b)×c=b(a ...
最新文章
- .NET : 再谈谈XML中的命名空间问题
- 西霞口船业公司疑遭外商合谋欺诈
- 为什么需要这么多编程语言?
- 具有关联映射的Hibernate Composite ID
- Virtools自己编译播放器
- rc mysql common_RR与RC隔离级别下MySQL不同的加锁解锁方式
- system类的 静态方法可以启动垃圾回收器。_跟小伟一起学习类加载机制
- 实现购物车的Session
- 普通人怎么样才能存到钱?
- Linux定时任务系统 Cron
- easyExcel导出下拉选择框,多sheet数据excle导入导出
- 华为鸿蒙跑了个“hello world”!跑通后,我特么开始怀疑人生....
- 一名优秀的数据科学家,需要具备哪些基本能力?
- Arduino使用TM1637 4位数码管模块
- 郑军科幻小说《冰与血》《海与人》
- 我要找什么样的女朋友?
- 黑马49期全套视频(2018年)
- 坐标系转换矩阵和几何转换矩阵的关系
- Leetcode 538 - Convert BST to Greater Tree
- 如何让Surface RT支持网站的flash