• 坐标变换


    坐标变换在机器人领域十分常见,推导了几种从易到难的坐标转换:

    1.二维平面绕原点旋转

     如图所示,O为原点,旋转角为$ heta$,P0、P1坐标分别为$(x_0,y_0)、(x_1,y_1)$,P0与X轴夹角为$alpha$,设P0和P1到原点距离为$r$,则P0坐标为:

    egin{equation}
    left{
    egin{array}{lr}
    x_0 = rcosalpha \
    y_0 = rsinalpha 
    end{array}
    ight.
    end{equation}

    P1坐标为:

    egin{equation}
    left{
    egin{array}{lr}
    x_1 = rcos(alpha+ heta) = rcos hetacosalpha-rsin hetasinalpha \
    y_1 = rsin(alpha+ heta) = rsin hetasinalpha+rcos hetasinalpha
    end{array}
    ight.
    end{equation}

     将公式(1)带入到公式2,,消去$r$得

    egin{equation}
    left{
    egin{array}{lr}
    x_1 = x_0cos heta-y_0sin heta \
    y_1 = x_0sin heta+y_0cos heta
    end{array}
    ight.
    end{equation}

    式(3)为由P0逆时针旋转至P1的表达式,也可通过该式求出由P1到P0的变换:

    egin{equation}
    left{
    egin{array}{lr}
    x_0 = -x_1sin heta+y_1cos heta \
    y_0 = x_1cos heta+y_1sin heta
    end{array}
    ight.
    end{equation}

    也可以用矩阵来表示变换,逆时针旋转$ heta$:

    egin{equation}
    left[
    egin{array}{lr}
    x_1\
    y_1
    end{array}
    ight ]
    =
    left[
    egin{array}{lr}
    cos heta&-sin heta \
    sin heta&cos heta
    end{array}
    ight ]
    left[
    egin{array}{lr}
    x_0\
    y_0
    end{array}
    ight ]
    end{equation}

    顺时针旋转$ heta$:

    egin{equation}
    left[
    egin{array}{lr}
    x_0\
    y_0
    end{array}
    ight ]
    =
    left[
    egin{array}{lr}
    -sin heta&cos heta \
    cos heta&sin heta
    end{array}
    ight ]
    left[
    egin{array}{lr}
    x_1\
    y_1
    end{array}
    ight ]
    end{equation}

     二者的系数矩阵相互可逆。

    2.二维平面绕固定点旋转

     如上图所示,现在改为绕P点旋转,点到P的距离为$r$。推导的方法和1中一致,设P0与x轴正方向夹角为$alpha$。则P0坐标为:

    egin{equation}
    left{
    egin{array}{lr}
    x_0 = rcosalpha+x \
    y_0 = rsinalpha+y 
    end{array}
    ight.
    end{equation}

    P1坐标为:

    egin{equation}
    left{
    egin{array}{lr}
    x_1 = rcos(alpha+ heta) +x = rcos hetacosalpha-rsin hetasinalpha+x \
    y_1 = rsin(alpha+ heta) +x = rsin hetasinalpha+rcos hetasinalpha+y
    end{array}
    ight.
    end{equation}

    将(7)式代入(8)式,消去$r$得:

    egin{equation}
    left{
    egin{array}{lr}
    x_1 = (x_0-x)cos heta-(y_0-y)sin heta +x\
    y_1 = (x_0-x)sin heta+(y_0-y)cos heta +y
    end{array}
    ight.
    end{equation}

    同理也可以由式(9)得到$x_0$、$y_0$的表达式

    egin{equation}
    left{
    egin{array}{lr}
    x_0 =-(x_1-x)sin heta+(y_1-y)cos heta+x \
    y_0 = (x_1-x)cos heta+(y_1-y)sin heta+y
    end{array}
    ight.
    end{equation}

    使用矩阵来表示,逆时针旋转$ heta$:

    egin{equation}
    left[
    egin{array}{lr}
    x_1\
    y_1
    end{array}
    ight ]
    =
    left[
    egin{array}{lr}
    cos heta&-sin heta \
    sin heta&cos heta
    end{array}
    ight ]
    left[
    egin{array}{lr}
    x_0-x\
    y_0-y
    end{array}
    ight ]
    +
    left[
    egin{array}{lr}
    x\
    y
    end{array}
    ight ]
    end{equation}

    顺时针旋转$ heta$:

    egin{equation}
    left[
    egin{array}{lr}
    x_0\
    y_0
    end{array}
    ight ]
    =
    left[
    egin{array}{lr}
    -sin heta&cos heta \
    cos heta&sin heta
    end{array}
    ight ]
    left[
    egin{array}{lr}
    x_1-x\
    y_1-y
    end{array}
    ight ]
    +
    left[
    egin{array}{lr}
    x\
    y
    end{array}
    ight ]
    end{equation}

  • 相关阅读:
    轮播 margin-left实现
    点击按钮切换图片
    运用把不同的方式排版,涉及到float box-flox box-orient
    chrome中font-size<12px时并不更改字体大小仍未12px
    js实现跑马灯
    支付宝支付集成
    前端技术博客
    在iphone5/5s出现界面显示不全,大小为iphone4/4s 的问题
    UIImage使用总结
    在IOS开发中使用自定义的字体
  • 原文地址:https://www.cnblogs.com/dlutjwh/p/10988287.html
Copyright © 2020-2023  润新知