C#角度旋转坐标公式

B(x2,y2)饶A(x,y)
逆时针转θ角后的新坐标是
((x2-x)cosθ-(y2-y)sinθ ,
(y2-y)cosθ+(x2-x)sinθ) 。
顺时针的话θ加个负号就是

///


/// 获取移动角度的新坐标
///

/// 旋转角度
/// 圆心坐标
/// 移动的坐标
///
private Point GetNewPoint(double Rate, Point CirPoint, Point MovePoint)
{
double Rage2 = Rate / 180 * Math.PI;
//B点绕A点转R度得到C点坐标,flag: 顺时针1,反时针-1:B是转的点,A是圆心
//C.X=(B.X-A.X)*COS(R*flag)-(B.Y-A.Y)*Sin(R*flag);
//C.Y= (B.Y-A.Y)*COS(R*flag)+(B.X-A.X)*sin(R*flag);
//转的点坐标-圆心坐标
//圆心坐标+计算坐标=新位置的坐标
int newx = (int)((MovePoint.X - CirPoint.X) * Math.Cos(Rage2) - (MovePoint.Y - CirPoint.Y) * Math.Sin(Rage2));
int newy = (int)((MovePoint.Y - CirPoint.Y) * Math.Cos(Rage2) + (MovePoint.X - CirPoint.X) * Math.Sin(Rage2));
Point newpoint=new Point(CirPoint.X + newx, CirPoint.Y + newy);
//计算长度
double lineJ = Math.Sqrt(Math.Pow(Math.Max(newpoint.X, CirPoint.X) - Math.Min(newpoint.X, CirPoint.X), 2) + Math.Pow(Math.Max(newpoint.Y, CirPoint.Y) - Math.Min(newpoint.Y, CirPoint.Y), 2));
return newpoint;
}

相关文档
最新文档