2011-10-11 12 views
6

Próbuję renderować wielokątów, ale mogą być renderowane tylko za pomocą prostokąty wyrównane do osi. Tak więc, szukam algorytmu, który może w zasadzie wypełnić wielokąt przy użyciu możliwej liczby prostokątów. Jeśli pomaga to zmniejszyć ilość, prostokąty mogą się nakładać na siebie.Wypełnianie wielokąta z najmniejszą ilością prostokąta

Ja już wdrożone this fill algorithm, które najczęściej wystarcza. Upadek polega na tym, że ogranicza prostokąty do każdego rzędu pikseli. Ostatecznie chcę zmniejszyć ilość prostokątów tak bardzo, jak to możliwe.

+0

Zakładam od pytania, że ​​wielokąt jest pikselowany? wielobok oparty na wektorze nie będzie mógł być wypełniony żadną skończoną liczbą prostokątów wyrównanych do osi, z wyjątkiem szczególnych przypadków ... – Chris

Odpowiedz

1

Reprezentacja pikseli wielokąta jest taka sama jak wielokąta prostoliniowego i można ją szybko podzielić na partycje. Zobacz odpowiedź na to question.

0

Usunięcie tego ograniczenia (że każdy prostokąt ma wysokość jednego piksela) pomaga w niektórych szczególnych przypadkach, gdy wielobok składa się z dużych prostokątów, ale w ogóle nie w ogólnym przypadku.

Co powiesz na to: użyj tego algorytmu, ale rozciągnij każdy prostokąt w górę i w dół, jak tylko możesz, a gdy wszystkie prostokąty są na swoim miejscu, wyeliminuj zbędne.

Jest jeszcze trochę miejsca na poprawę, że zamówienie w którym można wyeliminować zbędne prostokątów może materia w niektórych bardzo rzadkich przypadkach, ale szczerze mówiąc nie sądzę, że warto martwić się na praktyczne rozwiązanie .

+0

Gdy pomyślę o tym, mogę traktować wiersze jako grupę prostokątów, a następnie zastosować metody zasugerowano w [to pytanie] (http://stackoverflow.com/questions/5919298/algorithm-for-finding-the-fewest-rectangles-to-cover-a- set-of-rectangles). –