一个点绕某个定点旋转a角后的坐标计算,推导

         

背景:最近在做3D说话人说话时,下牙是一个旋转动作,可是在计算旋转后的新坐标时,脑子里极力搜索公式,却想不起来,这本是一个高中问题。最后在网上搜索到一个公式,却发现其推导有些复杂,故此处写下此问题的求解,自认为此处的求解过程较为简单。

问题描述:如上图,已知定点A(x0,y0),给定任一点B(x1,y1),求B饶A顺时针旋转a角度后的C点坐标。

解:先做平移,使A移到原点O,相应的B移到B',先求B'饶O顺时针旋转a角度后的C'点坐标,再讲该坐标平移得到C点坐标,即为所求。B'(x1-x0,y1-y0),角BAC=角B'OC'=a,设角B'Ox=b, |OB'|=r

则b=arctan[(y1-y0)/(x1-x0)] = arcsin[(y1-y0)/r] = arccos[(x1-x0)/r],(取那种表示方式视计算方便而定)

角C'Ox=a+b,则C'点坐标为(rcos(a+b),rsin(a+b) )

cos(a+b)=cosa*cosb-sina*sinb = (x1-x0)/r *cosa - (y1-y0)/r *sina

sin(a+b)=sina*cosb+cosa*sinb = (x1-x0)/r *sina + (y1-y0)/r *cosa

所以C’(x2',y2')为:

x2' = (x1-x0)*cosa - (y1-y0)*sina

y2' = (x1-x0)*sina + (y1-y0)*cosa

将C'按向量(x0,y0)平移得到C(x2,y2):

x2 = (x1-x0)*cosa - (y1-y0)*sina + x0

y2 = (x1-x0)*sina + (y1-y0)*cosa + y0

通常在做PCB定位时,我们会发现PCB 变换角度去计算出想对应的点位变化,同事 我车可以 使用变换矩阵来求