public bool Rotate(float angle, float x0, float y0) { float3 unity = new float3(new float2(x0, y0)); unity.Unit(); fTransformMatrix = float3x3.Rotate(angle, unity); XFORM xm = new XFORM(); Translate(-x0, -y0); // make (x0,y0) the origin double rad = angle * (Math.PI / 180); xm.eM11 = (float)Math.Cos(rad); xm.eM12 = (float)Math.Sin(rad); xm.eM21 = -xm.eM12; xm.eM22 = xm.eM11; xm.eDx = 0; xm.eDy = 0; Combine(xm); // rotate Translate(x0, y0); // move origin back return true; }