R.....y
R.....y
#programowanie #naukaprogramowania #cpp

mam losowy dwuwymiarowy kształt.
Czy da się go wypełnić inaczej niż rekurencyjnie sprawdzając wszystkie pixele dookoła, czy sie w nim mieszczą?

Przykładowo
  • Najlepsze
  • Wszystkie komentarze
vytah
vytah
4
@RedveKoronny: Tu masz serię algorytmów do wypełniania: https://en.wikipedia.org/wiki/Flood_fill
eyaf
eyaf
eyaf
1
@RedveKoronny: przykładowo? :D
s.....u
s.....u
@RedveKoronny: A jakie masz dane początkowe? Tylko punkt zerowy czy np maksymalne wymiary planszy?
g.....6
g.....6
@RedveKoronny: Jeśli kształt nie wystaje poza ekran, to może "wypełniać" zewnętrze kształtu, zaczynając od obwódki ekranu? Jeśli kształt jest wypukły, to możesz iść od lewej do prawej i w każdej linii obszar do wypełnienia będzie odcinkiem ograniczonym punktami po bokach (tak działało wypełnianie blitterem na Amidze)\
R.....y
R.....y
@eyaf:

FillFromPoint(0,0)

void FillFromPoint( vector2d punkt)
pokoloruj punkt w
Solidly
@RedveKoronny a jak sprawdzisz czy punkt jest w środku?
R.....y
R.....y
@Solidly: line-line intersection pozwalało wyznaczyc gdzie powinien sie konczyc
R.....y
R.....y
@sepuqqu: mam kształt który ma kilka właściwości:
-zbiór punktów razem ze współrzędnymi które go tworzą
-skalę
-kąt o jaki jest obrócony
-pozycję
s.....u
s.....u
To ze zbioru punktów obwodu możesz wyciągnąć gdzie w układzie się zaczyna figura i gdzie się kończy pionowo i poziomo (najmniejszy x, największy x, najmniejszy y i największy y ze zbioru współrzędnych)

i zrobić taki kwadrat ew dodac +1 jego wymiarów dla pewności i dla każdego punktu w kwadracie sprawdzasz czy się mieści w obwodzie i jak tak to wypełniasz

Ale czy to jest szybsze niż rekurencyjne to nie mam pojęcia
lionbest
zbiór punktów razem ze współrzędnymi które go tworzą

Znaczy się, to jest wielokąt z wierzchołkami, czy inna figura oparta o te punkty? Bo losowy dwu wymiary kształt to może znaczyć cokolwiek, a inaczej to zadanie nie ma sensu.
Jeżeli tak to podziel na trójkąty, gdzie jeden bok jest poziomy i wypełnij od jednego boku do drugiego, obliczając początek i koniec dla danej linii poziomej.