绕原点旋转
newx=x*cosa-y*sina
newy=x*sina+y*cosa
绕某一定点A(x0,y0)旋转
1.平移变换,将坐标原点移动到A点
newx=x-x0
newy=y-y0
2.旋转
newx=newx*cosa-newy*sina
newy=newx*sina+newx*cosa
3.平移变换,将坐标原点变回原来的O(0,0)点
newx=newx+x0
newy=newy+y0
PS:
在C#中,Math.Cos,Math.Sin等操作采用的angle度量为弧度!
result:
newx=x*cosa-y*sina
newy=x*sina+y*cosa
绕某一定点A(x0,y0)旋转
1.平移变换,将坐标原点移动到A点
newx=x-x0
newy=y-y0
2.旋转
newx=newx*cosa-newy*sina
newy=newx*sina+newx*cosa
3.平移变换,将坐标原点变回原来的O(0,0)点
newx=newx+x0
newy=newy+y0
PS:
在C#中,Math.Cos,Math.Sin等操作采用的angle度量为弧度!
在Emgu中,Rotation采用的angle度量为角度!
code:
private Point translation(Point pt,Point pteye,double angle)
{
//pt:原始坐标 pteye:参考点原始坐标
Point newpt = new Point();
pt.X -= pteye.X;
pt.Y -= pteye.Y;
newpt.X = Convert.ToInt16(pt.X * Math.Cos(angle) - pt.Y * Math.Sin(angle)+pteye.X);
newpt.Y = Convert.ToInt16(pt.X * Math.Sin(angle) + pt.Y * Math.Cos(angle) + pteye.Y);
return newpt;
}
result:
以左眼中心为旋转中心,旋转后左眼中心坐标不变,其余标记点均有变换
对所有点进行坐标变换后