zoukankan      html  css  js  c++  java
  • 二维图形旋转公式的推导(逆时针、顺时针)

        关于二维图形旋转可能在很多计算机图形学相关的书籍上都会介绍,然而真正理解公式推导过程的却讲得不多。那么如何推导出二维图形绕某一点旋转的公式呢?我在这里就将其推导过程简要的说明一下。

    其实推导过程比较简单,首先我们来看一幅图,看看如何推导出二维图形绕原点进行旋转的公式。

    上图画的比较粗略,不过能说明问题就够了。假设旋转前的点位于P处,旋转之后的点位于P'处。如何求旋转之后的点P'坐标?

    在图中,旋转之前P的方向角是a,旋转之后P'的方向角就变为a+b,这里b就是旋转的角度,所谓方向角是改点和原点连线与X轴正向的夹角。旋转的正方向是逆时针

    在图中,从P'点向X轴引垂线,垂足为B点,根据三角形的基础知识,可以写出如下的等式。

    公式1中的R就是点P以及P'到原点的距离

    由公式1,根据高中三角函数的知识,即和差公式得到如下等式2

    通过观察上式,Rcos(a)=x,Rsin(a)=y,所以上式进一步花间可以得到下面的等式。

    这个公式就是我们经常看到的二维图形旋转的公式,这样绕原点的旋转公式推导出来了,那么嗨经常碰到的绕某一点旋转的,比如绕着矢量图形的中心旋转的。在这种情况下,首先需要平移,然后旋转,最后平移回去,具体过程如下。

    由上图可知,(x0,y0)是旋转的顶点,那么先将图形平移到原点,然后绕着原点旋转b角度,最后平移到(x0,y0)上去。

    那么很容易可知绕任意一点(x0,y0)旋转的公式为

    是不是比较简单,我觉得还行。

     先介绍一个公式,即点(x,y)绕原点逆时针旋转α得到(x',y')的公式
    x'=xcosα-ysinα
    y'=xsinα+ycosα

    现在顺时针旋转α,即逆时针旋转-α,用-α代替上面的α,并根据公式cos(-α)=cosα,sin(-α)=-sinα得
    x'=xcosα+ysinα
    y'=-xsinα+ycosα

    最后如果旋转中心为(a,b),在利用上面的公式时,需要把(a,b)沿向量(-a,-b)移动到原点,此时(x,y)变成(x-a,y-b),(x',y')变成(x'-a,y'-b),整理得
    x'=(x-a)cosα+(y-b)sinα+a
    y'=-(x-a)sinα+(y-b)cosα+b

  • 相关阅读:
    H5开发推荐使用Q.js,轻量的前端单页路由框架
    微信公众号分享接口
    ios浏览器 图片size过大(长度6000px) 设置translateZ(0)/translate3d(0,0,0),会模糊
    Android Studio创建项目
    unity 旋转两种方法
    Unity3D 物体移动方法总结
    unity3d 各键值对应代码
    MonoBehaviour简述
    unity之Rigidbody属性
    Unity UGUI实现分段式血条
  • 原文地址:https://www.cnblogs.com/azbane/p/7306614.html
Copyright © 2011-2022 走看看