Может помочь, если вы переименуете переменные в нечто читаемое. Например:
rect_width = w
rect_height = h
surface_width = a
surface_height = b
rect_width и rect_height будут шириной и высотой Rect. X_offset будет слева.
rect_left = x_offset
Чтобы отцентрировать его по вертикали, найдите вертикальный центр:
surface_center_v = surface_height / 2
Затем поместите прямоугольник туда.
rect_top = surface_center_v
Однако это только помещает верхний край прямоугольника, и мы хотим вертикальный центр. Поэтому отрегулируйте положение прямоугольника вверх на половину его высоты, чтобы выровнять вертикальный центр прямоугольника с вертикальным центром поверхности.
rect_top -= rect_height / 2
Теперь у вас есть все параметры rect_left, rect_top, rect_width и rect_height.