精华内容
下载资源
问答
  • 2020-12-20 14:49:35

    我很难进入numpy . 我最终想要的是一个由矩阵变换的矢量的简单箭袋图 . 我已经阅读了很多次,只是使用数组作为矩阵,足够公平 . 我有一个x和y坐标的网格

    X,Y = np.meshgrid( np.arange(0,10,2),np.arange(0,10,1) )

    a = np.array([[1,0],[0,1.1]])

    但即使经过谷歌搜索并尝试超过两个小时,我也无法从 a 的矩阵乘法和每个向量中得到结果向量 . 我知道quiver将组件长度作为输入,因此进入quiver函数的结果向量应该类似于x-component的 np.dot(a, [X[i,j], Y[i,j]]) - X[i,j] ,其中i和j迭代范围 .

    我当然可以在一个循环中编程,但numpy有很多内置工具来使这些矢量化的东西方便,我相信这是一个更好的方法 .

    edit :好的,这是循环版本 .

    import numpy as np

    import matplotlib.pyplot as plt

    plt.figure(figsize=(10,10))

    n=10

    X,Y = np.meshgrid( np.arange(-5,5),np.arange(-5,5) )

    print("val test", X[5,3])

    a = np.array([[0.5,0],[0,1.3]])

    U = np.zeros((n,n))

    V = np.zeros((n,n))

    for i in range(10):

    for j in range(10):

    product = np.dot(a, [X[i,j], Y[i,j]]) #matrix with vector

    U[i,j] = product[0]-X[i,j] # have to substract the position since quiver accepts magnitudes

    V[i,j] = product[1]-Y[i,j]

    Q = plt.quiver( X,Y, U, V)

    更多相关内容
  • 矩阵表示坐标变换

    千次阅读 2021-03-13 18:55:18
    使用其次坐标可以方便地将空间的平移、缩放、旋转等用矩阵表示。 齐次坐标(Homogeneous Coordinates)是一个用于投影几何的坐标系统。这里不对齐次坐标进行详细的解释,只使用这样一个概念来解决图像变换中的问题。 ...

    只是我在学习坐标变换过程中记录的笔记,可能有理解错误或不到位之处。

    0.预备:齐次坐标

    在处理图像变换的过程中,需要使用齐次坐标。使用其次坐标可以方便地将空间的平移、缩放、旋转等用矩阵表示。

    齐次坐标(Homogeneous Coordinates)是一个用于投影几何的坐标系统。这里不对齐次坐标进行详细的解释,只使用这样一个概念来解决图像变换中的问题。

    如果一个点的坐标为(x,y,z),则将其扩展到四维后,其坐标为:(x,y,z,1);而如果(x,y,z)表示一个向量,则其其次坐标为(x,y,z,0)。

    为了方便记忆,可以这样考虑:两个向量相减或相加的结果都是向量,因此向量的w值应当是0,所以点的w值为1。或者,因为两个点相减的结果是向量,所以点的w为1,而向量的w为0。

    当希望对一个升到四维的坐标进行坐标变换时,需要一个4x4的变换矩阵。

    1.基础变换矩阵

    基础变换矩阵是只,只对一个坐标进行平移、旋转、缩放三个操作之一的矩阵。

    平移矩阵

    平移矩阵的格式如下:

    {
    	1,0,0,dx,
    	0,1,0,dy,
    	0,0,1,dz,
    	0,0,0,1
    }
    

    该矩阵与某坐标(x,y,z,1)的列向量进行矩阵乘法之后,得到的结果即为(x+dx,y+dy,z+dz)。

    缩放矩阵

    缩放矩阵的格式如下:

    {
    	kx,0,0,0,
    	0,ky,0,0,
    	0,0,kz,0,
    	0,0,0,1
    }
    

    旋转矩阵可以对点的位置进行缩放(本质是位置向量),也可以对一个向量进行缩放。
    不过上述的缩放矩阵只能沿三个坐标轴的方向进行缩放。

    旋转矩阵

    旋转矩阵较为复杂。推导的话应该是需要使用余弦定理。这里不给出具体的证明。

    另外,由于旋转所围绕的旋转轴有很多选择,所以更增加了旋转矩阵的复杂度。这里只给出以x、y、z轴为旋转轴的情况下的旋转矩阵。

    沿x轴旋转:

    {
    	1,0,0,0,
    	0,cos(a),-sin(a),0,
    	0,sin(a),cos(a),0,
    	0,0,0,1
    }
    

    沿y轴旋转:

    {
    	cos(a),0,sin(a),0,
    	0,1,0,0,
    	-sin(a),0,cos(a),0,
    	0,0,0,1
    }
    

    沿z轴旋转:

    {
    	cos(a),-sin(a),0,0,
    	sin(a),cos(a),0,0,
    	0,0,1,0,
    	0,0,0,1
    }
    

    2.复合变换矩阵

    由于矩阵乘法满足结合律,所以在将平移、旋转、缩放的操作都作用在一个目标上时,可以通过将基础变换矩阵相乘得到复合变换矩阵之后再作用于原坐标。

    将基础变换矩阵相乘得到复合变换矩阵的过程中需要遵循一定的顺序。

    不同基础变换矩阵之间的顺序

    假定对一个图像进行一系列操作。一般来说,我们最希望其进行操作所对应的原点是其“锚点”。在这种情况下,一般来说,规定的变换顺序是缩放->旋转->平移。

    可以这样理解:如果平移之后再进行缩放和旋转的操作,那么由于缩放和旋转变换的原点都是坐标原点,所以这时的操作得到的效果和预期“以锚点为原点”是不相符的。

    缩放和旋转的顺序也可以用类似的例子得到。

    所以可以得到最后的操作顺序:

    M = M t r a n s l a t i o n M r o t a t i o n M s c a l e M={M}_{translation}{M}_{rotation}{M}_{scale} M=MtranslationMrotationMscale

    旋转矩阵之间的顺序

    除了不同基础变换矩阵之间的顺序,旋转矩阵之间的操作顺序也会影响得到的结果。因此,在不同的情况下,需要使用不同的顺序来将多个旋转矩阵相乘得到总的旋转矩阵。

    展开全文
  • 对于矩阵我们应该并不陌生吧,在大学线性代数里面每天对它相加,相乘,转置等等,那么在计算机中该怎么实现呢? 首先,先定义一个矩阵的结构体。 const int MAXN = 100; //矩阵最大的行和列 // 定义一个矩阵 struct...

    引言

    对于矩阵我们应该并不陌生吧,在大学线性代数里面每天对它相加,相乘,转置等等,那么在计算机中该怎么实现呢?

    首先,先定义一个矩阵的结构体。

    const int MAXN = 100; 	//矩阵最大的行和列
    // 定义一个矩阵
    struct Matrix{
        int row,col; //行,列
        int matrix[MAXN][MAXN];
        Matrix(){}
        Matrix(int r,int c):row(r),col(c){}	// 初始化时同时给行列赋值
    };
    

    矩阵相加

    Matrix Add(Matrix x,Matrix y){
        Matrix answer = Matrix(x.row, x.col); 	//定义一个新矩阵
        for (int i = 0; i < x.row; ++i) {
            for (int j = 0; j < y.col; ++j) {
                answer.matrix[i][j] = x.matrix[i][j] + y.matrix[i][j]; //遍历矩阵中的每个元素然后赋值相加
            }
        }
        return answer;
    }
    

    矩阵相乘

    Matrix Multiply(Matrix x,Matrix y){
        // 初始化的新矩阵的行是第一个矩阵的行,列的第二个矩阵的列
        Matrix answer = Matrix(x.row, y.col);
        for (int i = 0; i < x.row; ++i) {
            for (int j = 0; j < y.col; ++j) {
                answer.matrix[i][j] = 0;
                for (int k = 0; k < x.col; ++k) {
                    answer.matrix[i][j] += x.matrix[i][k] * y.matrix[k][j];
                }
            }
        }
        return answer;
    }
    

    矩阵转置

    Matrix Transpose(Matrix x){
        Matrix answer = Matrix(x.col, x.row);//行列互换
        for (int i = 0; i < x.row; ++i) {
            for (int j = 0; j < x.col; ++j) {
                answer.matrix[i][j] = answer.matrix[j][i];
            }
        }
        return answer;
    }
    

    矩阵求幂

    Matrix QuickPower(Matrix x,int n){
        Matrix answer = Matrix(x.row, x.col);
        // 把answer初始化为单位阵,等价于求快速幂中的answer=1
        for (int i = 0; i < x.row; ++i) {
            for (int j = 0; j < x.col; ++j) {
                if (i == j) {
                    answer.matrix[i][j] = 1;
                } else {
                    answer.matrix[i][j] = 0;
                }
            }
        }
        // 类似于快速幂的算法
        while (n != 0) {
            if (n % 2 == 1) {
                answer = Multiply(answer, x);
            }
            n /= 2;
            x = Multiply(x, x);
        }
        return answer;
    
    }
    
    展开全文
  • 齐次坐标 1. 向量 1.1 点乘 两个n维向量点乘: 二维向量的点乘:向量的模长相乘再乘以夹角余弦值。 点乘的结果是一个数值(标量)。 几何意义:b向量再a向量上的投影长度。 1.2 叉乘 结果:是...

    1. 向量

    1.1 点乘

    两个n维向量点乘:

    二维向量的点乘:向量的模长相乘再乘以夹角余弦值。

    • 点乘的结果是一个数值(标量)。
    • 几何意义:b向量再a向量上的投影长度。

    1.2 叉乘

    • 结果:是一个向量(矢量)。
    • 几何意义:向量a和向量b叉乘的得到的向量是同时垂直于向量a和向量b的向量。

    2. 矩阵

    2.1 矩阵乘法

    n维矩阵的乘法运算。

    举例:

    3. 齐次坐标

    • 齐次坐标就是图形变换过程中为了方便计算产生的概念。齐次坐标是将一个原本是n维的向量用一个n+1维向量来表示。

    • 例如:二维点(x,y)的齐次坐标表示为(hx,hy,h)。由此可以看出,一个点的齐次表示是不唯一的,齐次坐标的h取不同的值都表示的是同一个点,比如齐次坐标(8,4,2)、(4,2,1)表示的都是二维点(4,2)。

    • 向量的w分量也叫齐次坐标。想要从齐次向量得到3D向量,我们可以把x、y和z坐标分别除以w坐标。我们通常不会注意这个问题,因为w分量通常是1.0。

    • 如果一个向量的齐次坐标是0,这个坐标就是方向向量(Direction Vector),因为w坐标是0,这个向量就不能位移(译注:这也就是我们说的不能位移一个方向)。 它可以理解为一个无穷远的点。n+1维的齐次坐标中如果h=0,实际上就表示了n维空间的一个无穷远点。

    • 使用齐次坐标有几点好处:它允许我们在3D向量上进行位移(如果没有w分量我们是不能位移向量的)

    展开全文
  • MFC写的实现立方体旋转功能,使用矩阵相乘方式,没有调用openGL旋转函数。
  • 矩阵相乘的理解1.基底的理解2.证明过程3.公式分析3.1分析3.23.2.1 n3=n2n3=n2n3=n2 时:3.2.2 n3<n2n3<n2n3<n2 时:3.2.3 n3>n2n3>n2n3>n2时 1.基底的理解   说到理解矩阵相乘的几何意义,第一个...
  • 详解坐标变换矩阵

    万次阅读 多人点赞 2021-12-27 22:54:28
    这是本人第一次在CSDN发文,本文详细总结坐标变换矩阵。 一、何为坐标变换矩阵 首先要回答一个问题,何为坐标变换矩阵呢?在以上所举例的坐标系变换的语境下, “点不变,坐标系进行变换。” 高中就接触到点的...
  • 矩阵与坐标系的映射关系

    千次阅读 2020-01-01 11:53:00
    矩阵与坐标系 下图展示了矩阵和二维坐标系的关系,二维坐标系可以看成图像,把这种关系应用到图像变换,就得到图像处理的方式变换,应用到三维空间坐标中,就得到三维空间坐标系变换关系。 仿射变换 仿射变换主要...
  • 矩阵相乘的源代码,方便做数字图像处理的人从三维坐标系转换二维坐标系。本代码可以直接添加到程序段中。
  • 数学基础III——矩阵与坐标变换

    千次阅读 2015-11-23 22:17:45
    矩阵常用来使得坐标系或者矢量的计算书写更加方便,看上去更加直观。 想象一下,我们用矩阵立体地表示坐标,远远比平面的,一行行奇长的书写要好看。...设矩阵AB,只有A的列数B的行数相当的情况下,
  • 前言:花了一个半月时间学习了 北大丘维声的《高等代数》、北理史荣昌的《矩阵分析》、清华张贤达的《矩阵分析应用》;北大哈工大的网课。本质:(万物皆矩阵矩阵论主要研究矩阵,对于图像、神经网络等可表示...
  • 对于齐次变换矩阵之间的相乘,我们以三个坐标系之间的变换关系为例: 是{C}在{A}中的描述,是{B}在{A}中的描述,是{C}在{B}中的描述。 对于坐标系之间的运动过程,我们可以做如下理解: (1) 第一步:{C}相...
  • Torch中的矩阵相乘分类

    千次阅读 2022-01-18 00:47:00
    矩阵相乘在torch中的几种情况 1、矩阵逐元素(Element-wise...只要mat1other满足broadcast条件,就可可以进行逐元素相乘 。 # 生成指定张量 c = torch.Tensor([[1, 2, 3], [4, 5 ,6]]) print(c.shape) # 2*3 print(c)
  • 关于是由点乘矩阵,还是矩阵乘点,而导致的矩阵相乘顺序的理解(跟旋转没关),同时提出为什么大多数教材采用矩阵乘点这种方式的理解,和opengl采用列优先存储矩阵的理解
  • 我们知道,坐标转换可以用向量一个转换矩阵相乘来达到转换目的。但要注意的是如果选择的是行向量,则是矩阵放在右边相乘,如果是列向量,则需要把矩阵放在向量左边相乘。如果不考虑位移,则我们可以用一个3X3矩阵...
  • 向量坐标与旋转矩阵

    2021-08-06 16:12:21
    我们知道,坐标转换可以用向量一个转换矩阵相乘来达到转换目的。但要注意的是如果选择的是行向量,则是矩阵放在右边相乘,如果是列向量,则需要把矩阵放在向量左边相乘。如果不考虑位移,则我们可以用一个3X3矩阵...
  • 缩放 矩阵缩放 该对角阵称为缩放矩阵 对称 切变 选择 齐次坐标 平移变换 向量平移不变性 两个点的中点
  • 矩阵-DirectXOpenGL的不同 矩阵是三维图形学中不可或缺的部分,几乎所有和变换相关的操作都涉及矩阵,世界变换,视图变换,投影变换,视口变换无一不需要矩阵,但是当今的两大主流图形库DirectX和OpenGL对矩阵...
  • 矩阵相乘的算法

    万次阅读 多人点赞 2019-08-05 19:49:29
    问题:求矩阵相乘后的和。 一、最基本的算法 下面给出一个例子来说明一下矩阵是如何相乘的。 矩阵A为 1 0 2 3 5 6 矩阵B为 3 1 2 2 1 3 C=A*B = 1*3+0*2+2*1 1*1+0*2+2*3 3*3+5*2+6*1 3*1...
  • 两个numpy的向量相乘并生成矩阵

    千次阅读 2022-04-08 10:55:41
    文章目录1. 错误方法2. 正确方法2.1 方法1:矩阵外积2.2 方法2:将向量转换为二维数组参考文章 import numpy as np a = np.array([1, 2, 3, 4]...符号*表示逐个元素相乘。 numpy.dot()和符号@表示矩阵乘法,但是它们会
  • 四元数 四元数(quaternion)可以看作中学时学的复数的扩充,它有三个虚部。形式如下: 四元数(quaternion)可以看作中学时学的复数的扩充,它有三个虚部。形式如下: ...4*4变换矩阵 四元数到4*4矩阵 ...
  • 都知道旋转矩阵表达的是刚体(坐标系{B})相对参考坐标系{A}的姿态信息,那如何利用已知的旋转矩阵,将{A}旋转一定角度变成{B}一样的姿态呢?有几种方法:固定角旋转、欧拉角旋转、angle-axis表达法、Quaternion...
  • (二十四) opencv中mat矩阵相乘

    千次阅读 2022-02-07 20:41:09
    A*B是以数学运算中矩阵相乘的方式实现的,即Mat矩阵A和B被当做纯粹的矩阵做乘法运算,要求A的列数等于B的行数时,才能定义两个矩阵相乘。如A时m*n矩阵,B是n*p矩阵,乘积AB是一个m*p矩阵。 参与点乘的两个Mat矩阵的...
  • 矩阵相乘的意义

    千次阅读 2018-04-20 12:02:54
    这个问题我也思考了许久,如何从高中的知识过度到大学的线代知识,偶然间看到一篇文章再结合MIT的线代和国内的西工大的矩阵论的一小撮知识,终于把这个问题可以详细的写出来了,达到知其所以...
  • 我在旋转矩阵的两种用法一文中提出了关于RRR的两个基本变换关系:旧坐标=R∗新坐标坐标转换公式)旧坐标=R*新坐标坐标转换公式)旧坐标=R∗新坐标坐标转换公式)新向量=R∗旧向量(向量转移公式)新向量=R*旧...
  • 矩阵相乘的几何意义

    2020-06-23 11:59:45
    1.上边链接是我看的对矩阵相乘的几何意义最清楚的解释了。 2.重点: A * B B左乘A, 可以把A看做坐标系,A的行向量是坐标系的基向量。把B看做列向量集合。 A * B就是把B中的列向量投影到A的所有基向量上。计算过程...
  • 相机内外参矩阵坐标变换

    万次阅读 多人点赞 2019-07-30 09:31:48
    于是,从世界坐标系到相机坐标系,涉及到旋转和平移(其实所有的运动也可以用旋转矩阵和平移向量来描述)。绕着不同的坐标轴旋转不同的角度,得到相应的旋转矩阵,如下图所示: 于是可以得到 P 点在相机坐标系下的...
  • Qt坐标系统之坐标变换矩阵(QTransform类)

    万次阅读 多人点赞 2018-10-21 05:33:34
    Qt坐标变换之坐标变换矩阵(QTransform类) 若对C++语法不熟悉,建议参阅《C++语法详解》一书,电子工业出版社出版,该书语法示例短小精悍,对查阅C++知识点相当方便,并对语法原理进行了透彻、深入详细的讲解,可...
  • 自己是个新手,研究java数据结构,看到两个n阶矩阵相乘的题目,自己就试着写了一个简单的demo,哪里有不好的地方,也希望大家多提提意见,直接上代码了:package com.shujujiegou01;public class JuZhenChengFa {// ...
  • 文章目录前言一、矩阵 ... 近期由于项目需求,研究了一下通过矩阵来转换不同坐标系,接下来就简单记录一下。 一、矩阵 Matrix4x4? UnityEngine.Matrix4x4 是 Unity 提供的方便矩阵计算而封装的一个结构体,提供

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,357
精华内容 10,142
关键字:

矩阵与坐标相乘怎么算

友情链接: CCS.rar