www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

chrisslater

Gepostet:
21.03.2009 21:01

Ein Bitmap horizontal und vertikal spiegeln  
schon wieder ich

Das nächste Problem wäre das spiegeln einer Bitmap

sodass bei der Eingabe der Koordinaten (1,1),(1,2),(2,1) diese Bild

*
**


ausgegeben werden würde und bei einer Spiegelung dieses Bild entstehen würde

*
**


auch weiß weiß ich nicht so recht wie ich das in Haskell umsetzen könnte.
Zum Seitenanfang    
 
Siracusa

Gepostet:
22.03.2009 16:32

   
Hallo,

die Bitmap zu spiegeln sollte nicht so schwer sein. Du hast eine Liste [(Int, Int)] und kannst dir daraus die größte und die kleinste x-Koordinate in allen Paaren bestimmen. Wenn dein Bild keine negativen Koordinaten hat, dann ist die Breite immer die größte x-Koordinate. Zum horizontalen Spiegeln berechnest du einfach x' = x_max - x, wobei x die aktuelle x-Koordinate und x' die gespiegelte x-Koordinate ist. Für vertikales Spiegeln das ganze analog, nur mit den y-Koordinaten.


Viele Grüße,

Siracusa
Zum Seitenanfang    
 
chrisslater

Gepostet:
22.03.2009 17:32

   
Also ich bin jetzt bei spiegeln soweit gekommen

qsort :: Bitmap -> Bitmap
qsort [] = []
qsort (x:xs) = qsort [ y | y <- xs, y < x ] ++ [x] ++ qsort [ y | y <- xs, y >= x ]


x_max :: Bitmap -> Int
x_max xs = flipV'(unzip((qsort xs)))

flipV' :: ([Int],[Int]) -> Int
flipV' (xs, ys) = last(xs)

flipV :: Bitmap -> Bitmap
flipV ((x,y):xs) = (x',y): flipV xs
where x' = (x_max(xs)-x)


aber irgendwas scheint, da immer noch nicht ganz hinzuhauen nur weiß ich nicht was. Kann aber auch sein dass ich deinen Vorschlag völlig falsch verstanden hab

Zum Seitenanfang    
 
Siracusa

Gepostet:
22.03.2009 18:57

   
Also das mit dem Quicksort funktioniert entweder nur bei x- oder nur bei y-Koordinaten, weiß nicht genau wie Tupel genau sortiert werden. Besser ist erst ein unzip machen und dann sortieren. Und du musst das Maximum am Anfang mit der gesamten Liste berechnen und dann immer den gleichen Wert benutzen. Momentan berechnest du das in jedem Rekursionsschritt neu, immer mit einer anderen Liste.
Zum Seitenanfang