视觉及vslam中的数学计算机图像理论opencv及vslam

正交矩阵及矩阵变换的python实现--Apple的学习笔记

2019-04-13  本文已影响21人  applecai

1.正交矩阵的性质

a,逆等于转置,行列式值为±1。
b,各行以及各列是单位向量且两两正交,标准正交基经正交变换后仍为标准正交基。
c,变换前后内积不变即向量的模长与夹角不变。

2.二阶正交矩阵的几何意义

是绕坐标原点的旋转,或是通过原点直线的反射。
根据它的行列式是否为正常或非正常来确定。


t1.png

3.旋转矩阵是正交矩阵

通过三角函数推导出旋转矩阵后,发现旋转矩阵是正交矩阵中的一种


Good_旋转矩阵的推导.png

4.实现函数旋转变换的python代码

    import numpy as np
    import matplotlib.pyplot as plt
    
    #T = np.array([[3,1],[1,-1]])
    T = np.array([[-1,0],[0,1]])
    x = np.arange(0, 10,0.2)[:,np.newaxis]
    print (x)
    y = 4*(x-1)
    # horizontal stack 合并x和y成为一组数据,制作合集D
    D = np.hstack((x,y))
    mylist = []
    for i in range(len(D)):
        xy_new = T.dot(D[i]) # 对每一组x和y组成的向量,和矩阵T进行内积运算
        mylist.append(xy_new.tolist())  # 每个numpy.array转List
    #print (mylist)
    # 所有list转为numpy
    xy_newAll = np.array(mylist)
    
    #print (xy_newAll)
    x_new = xy_newAll[:,0]  # 取出新的x
    #print(x_new)
    y_new = xy_newAll[:,1]  # 取出新的x
    #print(y_new)
    #创建figure窗口
    plt.figure()
    #设置坐标轴的文字标签
    # plt.xlabel('X axis...')
    # plt.ylabel('Y axis...')
    # 设置x轴的取值范围为:-1到2
    plt.xlim(-10, 10)
    # 设置y轴的取值范围为:-1到3
    plt.ylim(-10, 10)
    # 设置x轴刻度
    # new_ticks = np.linspace(-10, 20, 5)
    # plt.xticks(new_ticks)
    
    # get current axis 获得坐标轴对象
    ax = plt.gca()
    # 将右边 上边的两条边颜色设置为空 其实就相当于抹掉这两条边
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    # 指定下边的边作为 x 轴   指定左边的边为 y 轴
    ax.xaxis.set_ticks_position('bottom')
    ax.yaxis.set_ticks_position('left')
    #指定 data  设置的bottom(也就是指定的x轴)绑定到y轴的0这个点上
    ax.spines['bottom'].set_position(('data', 0))
    ax.spines['left'].set_position(('data', 0))
    
    plt.plot(x, y, color='red',linestyle='--')
    plt.plot(x_new, y_new)
    
    plt.show()

111.png
上一篇 下一篇

猜你喜欢

热点阅读