Снятие этого ограничения (высота каждого прямоугольника равна одному пикселю) помогает в некоторых особых случаях, когда многоугольник состоит из больших прямоугольников, но не в общем случае.
Как насчет этого: используйте этот алгоритм, но максимально увеличьте каждый прямоугольник вверх и вниз, а когда все прямоугольники на месте, удалите лишние.
Есть еще немного возможностей для улучшения, в котором порядок , в котором вы исключаете лишние прямоугольники, может иметь значение в некоторых очень редких случаях, но, честно говоря, я не думаю, что стоит беспокоиться о практическое решение.