zoukankan      html  css  js  c++  java
  • 点旋转和坐标系旋转

    同一坐标系下的点旋转变换(如图1所示)和不同坐标系之间的旋转变换(如图2所示),一直困扰着我,它们是两个不同的概念,但形式上有很相似,以二维空间为例做了下推导,加深理解。

    同一坐标系下的点旋转变换,比较好理解,是在相同的坐标系下做的旋转变换。如图3所示,已知逆时针的旋转角度为θ,我们引入中间变量向量的长度r和水平夹角α,显而易见地,推导公式如下:

    (x=r cos( heta+alpha)=rcos( heta)cos(alpha)-rsin( heta)sin(alpha)=x^{'}cos( heta)-x^{'}sin( heta))
    (y=r sin( heta+alpha)=rsin( heta)cos(alpha)+rcos( heta)sin(alpha)=x^{'}sin( heta)+x^{'}cos( heta)) 

    (egin{bmatrix}
    x\
    y
    end{bmatrix}=egin{bmatrix}
    cos( heta) & -sin( heta) \
    sin( heta) &cos( heta) &
    end{bmatrix}egin{bmatrix}
    x^{'}\
    y^{'}
    end{bmatrix})

    齐次坐标系的表达为:

    (egin{bmatrix}
    x\
    y\
    1
    end{bmatrix}=egin{bmatrix}
    cos( heta) & -sin( heta) &0\
    sin( heta) &cos( heta) & 0 \
    0&0&1
    end{bmatrix}egin{bmatrix}
    x^{'}\
    y^{'}\
    1
    end{bmatrix})

    不同坐标系之间的旋转变换,这是透视变换中常用到的,它的作用是将一个点从一个坐标系统映射到另一个坐标系统下,这在将世界坐标系统映射到相机坐标系统中是很有用的。如图4所示,已知坐标系O'X'Y'相对于OXY坐标系逆时针的旋转角度为θ,O'X'Y'的坐标原点O'相对于OXY的坐标为(x0,y0),我们引入中间变量向量的长度r和水平夹角α。变换的思路是,先对O'X'Y'坐标系旋转θ,然后在平移(x0,y0)。推导过程如下:

    (x=rcos( heta+alpha)+x_{0}=rcos( heta)cos(alpha)-rsin( heta)sin(alpha)=x^{'}cos( heta)-x^{'}sin( heta)+x_{0})
    (y=r sin( heta+alpha)+y_{0}=rsin( heta)cos(alpha)+rcos( heta)sin(alpha)=x^{'}sin( heta)+x^{'}cos( heta)+y_{0})

    (egin{bmatrix}
    x\
    y
    end{bmatrix}=egin{bmatrix}
    cos( heta) & -sin( heta) \
    sin( heta) &cos( heta) &
    end{bmatrix}egin{bmatrix}
    x^{'}\
    y^{'}
    end{bmatrix}+egin{bmatrix}
    x^{0}\
    y^{0}
    end{bmatrix})

     齐次坐标系的表达为: 

    (egin{bmatrix}
    x\
    y
    end{bmatrix}=egin{bmatrix}
    cos( heta) & -sin( heta) &x^{0}\
    sin( heta) &cos( heta) &y^{0}\
    0&0 &1
    end{bmatrix}egin{bmatrix}
    x^{'}\
    y^{'}\
    1
    end{bmatrix})

     注意齐次坐标的作用是把旋转缩放和平移结合起来,在传统的欧几里得空间中是做不到的,需要在投影空间中的齐次坐标系统下完成。

    同理可以扩展到三维空间。OXYZ坐标系统可以看作是相机坐标系统,O'X'Y'Z'可以看做世界坐标系统,

    参考资料:

    [1].矩阵的坐标变换(转)(里面介绍了矩阵的旋转缩放,还有推导过程,强烈推荐★★★★★)

  • 相关阅读:
    SAP的一些HR函数
    如何在sap的screen中使用ListBox
    关于SAP的SD的定价公式的资料(强力推荐,有时间我会进行翻译)
    如何设计和使用自定义的权限对象(自定义权限检查函数)
    [转载]ASP.NET面试题收集
    [转载]sql in与exists区别
    删除A数据表中的一行数据时,不小心将表名写成了B,现在想恢复B中刚删除的的着一行数据怎么办
    删除A数据表中的一行数据时,不小心将表名写成了B,现在想恢复B中刚删除的的着一行数据怎么办
    oracle优化总结经验
    oracle优化总结经验
  • 原文地址:https://www.cnblogs.com/cv-pr/p/4850465.html
Copyright © 2011-2022 走看看