public void Rotate(double sx, double sy, List <IPointShape> points, ref double rotateAngle) { var centerX = Bounds.CenterX; var centerY = Bounds.CenterY; var p0 = new Point2(centerX, centerY); var p1 = new Point2(sx, sy); var angle = p0.AngleBetween(p1) - 270.0; var delta = angle - rotateAngle; var radians = delta * (Math.PI / 180.0); var matrix = Matrix2.Rotation(radians, centerX, centerY); TransformPoints(ref matrix, points); rotateAngle = angle; Update(); }