zoukankan      html  css  js  c++  java
  • 数学之向量的点积(点乘、数量积)

    向量的点积(英语:dot product)(数量积的定义):

    几何意义是:是一条边向另一条边的投影乘以另一条边的长度。

    在其物理上面的几何意义是容易理解的。如下图所示:


    现在求F1在水平方向上的做功:

    W = F1 * Cosθ * S

    那么套用数量积公式:

    力F1在水平方向位移S,可以表示为:

    F1 * S = Cosθ * |F1| * |S|

    上面的数量积公式的使用如下:

    当θ夹角小于90度时,F1 * S > 0

    当θ夹角大于90度时,F1 * S < 0

    利用上面的特性,在游戏的开发中可以作为一个玩家的视野计算,对玩家身前可能存在的碰撞进行检测。

    如上图所示,2号蓝线为玩家的面朝的方向,我们可以知道1和3红线对2线的夹角是小于90度的,这也就是玩家的面朝的方向

    再看4号线,与2号线的夹角是大于90度的,故向量2与向量4的点积是小于0的,故我们可以判断4是玩家的视野盲区,也就是玩家的身后。

    我们如果需要对玩家身前是否有障碍需要判断的话,可以通过向量来实现。

    -------------------------------------------------------------------------------------------------

    我们首先设置的是RPG玩家的位置,假设是(10,10)

    下面的向量描述都是以玩家为中心的描述。

    我们设置他的视野范围是5,知道主角的朝向假设是向量(1,1)

    现在有一个箱子的向量是(-3,4);

    利用点积公式:

    1 * (-3) + 1 * 4 = 1

    因为1大于0,推导出他们的夹角θ是大于0小于等于90度的

    故该箱子一定是位于玩家的前方的。

    再次假设,玩家的视野角度是60度。计算Cosθ的值

    Cosθ = 2 / (sqrt(2) * 5) = 2 / (1.4 * 5) = 2 / 7 = 0.2857

    计算反余弦:ArcCos 0.2857 =  73.399305 ° 

    知道了箱子与玩家朝向的向量(1,1)的夹角是73度,故可以知道,该箱子不在玩家的视野中。

    如果还不懂,可以对照下图的大致图解:





  • 相关阅读:
    Qt 查询字符串数据
    #include <stdint.h>
    滤波器设计-巴特沃尔斯低通滤波设计 转
    小波学习之二(单层一维离散小波变换DWT的Mallat算法C++实现优化)--转载
    机器学习之Bagging与随机森林笔记
    机器学习之决策树笔记
    机器学习之softmax回归笔记
    机器学习之逻辑回归(Logistic)笔记
    机器学习之模型拟合效果的判断笔记
    机器学习最小二乘法笔记
  • 原文地址:https://www.cnblogs.com/vokie/p/3602095.html
Copyright © 2011-2022 走看看