矩阵与点乘与叉乘在Unity中的区别

今天豁然开朗来记录一下我理解的矩阵以及四元数和点乘与叉乘的理解。

首先说矩阵以及四元数

矩阵的乘法是根据n*m列来获取的,n的行数是代表结果的行数,m的列数代表结果的列数。

红色与黑色表示第一个矩阵中的4个数,紫色和灰色表示第二个矩阵的4个数,矩阵的乘法是第一个矩阵的n行与第二个矩阵的m列想乘并把乘机相加的到结果矩阵 第(n,m)位置的结果。

而四元数表示一个[x,y,z,1] * 4*4的矩阵。每组的矩阵正好只有一个有值。[1 ,0,0,0] [0,1,0,0][0,0,1,0][Tx,Ty,Tz,1].其实我们可以看作不同维度的4条线。其实矩阵就是方程式的变换表达方式。具体理解参见http://www.ruanyifeng.com/blog/2015/09/matrix-multiplication.html

当我们从4维空间的向量表示一个旋转的角度就不会出现欧拉旋转那样的万象限死锁。原因是,一个一维度的四元素与一个4*4的矩阵相乘的话,我们就能够获得一个新的一维度的四元数。

这就是为什么要加一个维度来解决三维旋转死锁的原因。如果有四维空间的话,我们如果要解决四维空间死锁的问题我觉得也需要再加一个维度来解决。

从矩阵的乘法,我们来讲点乘与叉乘,点乘很简单就是两个向量的每个元素的乘法,符合我们平常的理解。就是x*x+y*y+z*z通过也可以是a·b=|a|·|b|cos<a,b>这种表示。通过点乘得到的结果是标量不能代表方向。

而叉乘,如维基百科https://en.wikipedia.org/wiki/Cross_product每个维度的坐标都先与xyz的单位向量相乘后在做运算,所以得到的结果可以描述一个向量。(具体自己也没看太明白)

而在Unity中通过点乘描述旋转角度,而叉乘描述的是方位,这里方位的理解是,因为点乘是有方向的,如果点乘得到的结果是一个面积,而这个面正好是我们原始朝向转向点需要转向的方向,这里不再需要通过角度来做正向与反向的判断(如果用点乘的角度来计算转的方向的话当然会出现我们是正向转还是逆向转的问题。)而叉乘得到的结果是个一个面积,也就是说转向扫过的面,只会有一个朝向,逆向朝向的话面积与算出来的面积不对称。这样我们省略掉了一个点乘得到角度向左还是向右转的步骤。

Thinkings and Tips:

1.还有个猜想x,y,z的值表示一个空间点。当我们在通过另一个维度w。来计算空间点的时候,是否不会影响x,y,z空间点的位置呢。也就是四元素的数学原理到底是怎么样子的呢。

2.矩阵的表达方式并不能用加减乘除的普通四维来理解,因为矩阵是线与面的表达计算方式,而我们普通的运算只是点而已。矩阵的出现是为方程式的表达简化而出现的。也就是线性映射。

时间: 2024-10-12 17:37:57

矩阵与点乘与叉乘在Unity中的区别的相关文章

写给VR手游开发小白的教程:(四)补充篇,详细介绍Unity中相机的投影矩阵

这篇作为上一篇的补充介绍,主要讲Unity里面的投影矩阵的问题: 上篇的链接写给VR手游开发小白的教程:(三)UnityVR插件CardboardSDKForUnity解析(二) 关于Unity中的Camera,圣典里面对每一项属性都做了简要的介绍,没看过的小伙伴传送门在下面 http://www.ceeger.com/Components/class-Camera.html 一.裁剪面 先从这个专业的词汇开始,以下是圣典对裁剪面的介绍: The Near and Far Clip Plane

矩阵的点成和叉乘

https://blog.csdn.net/u013066730/article/details/57462299 https://blog.csdn.net/u012609509/article/details/70230204 https://wenku.baidu.com/view/d50aab86ec3a87c24028c40e.html?sxts=1546408959347 矩阵的叉乘: a = 1     0     2 -1     3     1 b = 3     1 2  

【转载】Unity中矩阵的平移、旋转、缩放

By:克森 简介 在这篇文章中,我们将会学到几个概念:平移矩阵.旋转矩阵.缩放矩阵.在学这几个基本概念的同时,我们会用到 Mesh(网格).数学运算.4x4矩阵的一些简单的操作.但由于克森也是新手,文章的严谨性可能不是很高,还请大神们多多指教. 创建项目 首先创建一个Unity工程,克森把他命名为“Matrix of China”(中国的矩阵),基本配置如下图所示: 为了便于查找,让我们在 Assets 目录下新建三个文件夹,分别命名为“Scripts”.“Shader”.“Materials”

[LeetCode] 285. Inorder Successor in BST 二叉搜索树中的中序后继节点

Given a binary search tree and a node in it, find the in-order successor of that node in the BST. Note: If the given node has no in-order successor in the tree, return null. 给一个二叉搜索树和它的一个节点,找出它的中序后继节点,如果没有返回null. 解法1: 用中序遍历二叉搜索树,当找到root.val = p.val的时

二叉线索树-创建中序二叉线索树、查找前驱、查找后继、按照前驱或后继遍历

#include <iostream> #include <stack> using namespace std; struct BiThrNode { int data; BiThrNode *left; BiThrNode *right; bool ltag;//0表示left指向左子,1表示left指向直接前驱 bool rtag; //BiThrNode(int val,BiThrNode *l,BiThrNode *r,bool lt,bool rt):data(val)

python3 与dict相关的魔法方法。使用于二叉搜索树的类中

Python的魔术方法一般以__methodname__的形式命名,如:__init__(构造方法), __getitem__. __setitem__(subscriptable所需method), __delitem__(del obj[key]所需method), __len__(len(…)所需method)等. 在Python中,如果我们想实现创建类似于序列和映射的类,可以通过重写魔法方法__getitem__.__setitem__.__delitem__.__len__方法去模拟.

[LeetCode] Inorder Successor in BST II 二叉搜索树中的中序后继节点之二

Given a binary search tree and a node in it, find the in-order successor of that node in the BST. The successor of a node p is the node with the smallest key greater than p.val. You will have direct access to the node but not to the root of the tree.

[Swift]LeetCode285. 二叉搜索树中的中序后继节点 $ Inorder Successor in BST

Given a binary search tree and a node in it, find the in-order successor of that node in the BST. The successor of a node p is the node with the smallest key greater than p.val. Example 1: Input: root = [2,1,3], p = 1 Output: 2 Explanation: 1's in-or

12.高斯消去法(1)——矩阵编程基础

对于一阶线性方程的求解有多种方式,这里将介绍利用高斯消去法解一阶线性方程组.在介绍高斯消去法前需要对<线性代数>做一下温习,同时在代码中对于矩阵的存储做一个简要介绍. 通常遇到矩阵我们会利用二维数组来进行对矩阵数值的存储(例如前几篇中动态规划中对于求解矩阵初始化就是利用二维数组),但在计算机的内存中是没有“二维”这种存储方式的,内存都是以“一维”的方式存储数据,那么这就带来一个问题,在代码层面定义一个二维数组时,计算机内部是怎么存储的呢? int[][] array = new int[3][