2012-04-24 15 views
10

Mam fajny problem. Próbuję podkreślić dokładnie 50% masy tego indyka. W praktyce nie będzie to 50%, ale jeśli uda mi się zdobyć 50%, mogę wyliczyć resztę.Jak wyrzeźbić połowę Święta Dziękczynienia w Turcji?

Mój obecny pomysł jest następujący: Skanuj w każdym pikselu, aby znaleźć masę indyka w pikselach. Następnie, gdy chcę uzyskać 50% indyka, podświetl piksele od lewej do prawej, aż podkreślę 50% pikseli.

Czy ktoś ma lepsze pomysły? Jest to najwolniejsza, brutalna idea, która wymaga pętli po każdym pikselu, aby zliczyć piksele i ponownie podświetlić 50% z nich.

Należy zauważyć, że podzielenie obrazu w pionie nie pozostawi 50% indyka, ponieważ ciało indyka jest o wiele bardziej mięsiste niż jego szyja.

This is a Turkey

+1

Ktokolwiek zagłosował na zamknięcie tego ... To poważny problem. Próbuję zrobić infografikę, która koloruje indyka w oparciu o pewne procenty. – DanRedux

+2

@DanRedux: Ale w obecnym stanie nie jest to problem programistyczny. Pytasz tylko o metody; * jak * możesz to zrobić. Jest bardziej na temat dla programistów. – animuson

+0

Czy jesteś pewien, że chcesz podświetlić 50% pikseli zamiast 50% liniowej miary? Nie sądzę, aby ludzie dobrze oceniali objętość lub obszar, patrząc na złożone kształty. –

Odpowiedz

3

Mówisz procent zmieni, ale mam zamiar iść w opałach tutaj i zakładać indyka sama nie będzie.

Więc nie musisz pętli dwa razy. Trzeba to zrobić tylko raz, zamapować dane na jakąś formę struktury, do której można się odwołać, a następnie odnosić się do niej za każdym razem, gdy trzeba podświetlić, aby określić, jak daleko należy się posunąć.

Na przykład, zrób asocjacyjna <percentage of mass (integer out of a hundred) => vertical column number (int)>

ten sposób, gdy trzeba cień x procent, trzeba tylko do pętli nad cached_data [percent_to_highlight] kolumny pikseli, je wszystkie cieniowanie, a następnie wyrwać pętli całkowicie po jej osiągnięciu.


Aby uzyskać jeszcze lepszą wydajność, należy mieć dwa zdjęcia - jeden całkowicie zacieniony plus normalny. Tablicy asocjacyjnej powinny map percentage => byte_offset

dla każdego obrazu, który chcesz wygenerować, wystarczy memcpy lub cokolwiek równoważne PHP z szybkim, wahała się skopiować z 0 -> byte_offset z zacienionym obrazu nad non-zacienione i oszczędzać. Koniec z zapętlaniem. Nie można uzyskać szybciej niż to.

+0

Właściwie to już robię ...Powinienem był to sprecyzować, ale tak, gdybym robił moją metodę, przekonwertowałbym ją na strumień pikseli i strumień ich pewnej części. – DanRedux

+0

Jeśli robisz dokładnie to, co napisałem ... w jaki sposób uzyskać lepszą wydajność niż O (N/x), gdzie x jest odwrotnością wymaganej ilości zacienionych? –

+0

Prawdopodobnie za pomocą jakiegoś drzewa/macierzy pikseli, które mogę zaznaczyć ... Jakbym, gdybym poprosił o 10%, z pewnością mógłbym wziąć kilka skrótów, zamiast jeździć na rowerze przez 10% pikseli i rysować je .. Myślę o jakimkolwiek innym formacie, który sprawiłby, że jest mniejszy niż O (n/x) .. – DanRedux

0

Problem nie wygląda na to, że mam do czynienia z inteligentnym algorytmem. Ale nie jestem też ekspertem od CG, więc mogę się mylić.

Próbowanie takiego rozwiązania może bardzo zwiększyć złożoność czasu (niż O (n)), jeśli w końcu wykorzystamy pętle zagnieżdżone na n, gdzie n będzie całkowitą liczbą pikseli użytych przez indyka.

Zamiast tego sposób dwukierunkowy jest bardzo łatwy do wdrożenia (bardzo mniej czasu/wysiłku do wdrożenia), a także będzie O (n) zaniedbanie stałej 2, która nie jest złym rozwiązaniem. W zależności od celu, sprzętu, ograniczenia przestrzeni, itp., Piszesz to rozwiązanie; przejście na dwudrożny może być bardziej satysfakcjonujące.

Powiązane problemy