Kreis in einem Mosaik färben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Toad
User
Beiträge: 13
Registriert: Montag 18. April 2011, 07:50

Dienstag 26. April 2011, 22:09

Hallo liebe Forenmitglieder ich verzweifel gerade etwas an einer Aufgabe die ich habe.
Ich habe mit tkinter und canvas ein Mosaik das gezeichnet wird am Ende.

Anfangsaufspannung:

Code: Alles auswählen

for row in range(s):
		for col in range(s):
			# calculates the coordinates of the current stone
			x1 = stone_size * row
			y1 = stone_size * col
			x2 = x1 + stone_size
			y2 = y1 + stone_size
			# gets the color of the current stone
			color = decide_color(row, col, s)
			# paints the current stone on the given position
			graphic.create_rectangle(x1, y1, x2, y2, fill = color, outline="")
Innerhalb dieses Mosaiks will ich nun einen Kreis färben mir fehlt allerdings jegliche Idee, wie wenn zB. nur Teile eines Steins betroffen sind, diesen nur teilweise einzufärben.

(Ich möchte keinen Code da ich es ja lernen möchte, ich hoffe nur auf einen kleinen Tipp, da ich schon vieles nachgeschaut hab aber noch nichts gefunden habe das mich weiterbringt)

MfG
ToaD
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 26. April 2011, 22:13

Gegenfrage: Was ist denn ein "Stein"? Denk mal darüber nach ;-) Und für das, was einen Stein ausmacht, wird es etwas analoges auch für Kreise geben - denke ich mal. (Unter pygame gibt es das jedenfalls)

Edit: Oder meinst Du eher so was?
Bild

Also dass die Zwischenräume nicht eingefärbt werden?
Zuletzt geändert von Hyperion am Dienstag 26. April 2011, 22:23, insgesamt 1-mal geändert.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3))
assert encoding_kapiert
Toad
User
Beiträge: 13
Registriert: Montag 18. April 2011, 07:50

Dienstag 26. April 2011, 22:17

Ein Stein setzt sich hierbei aus der Postionsbestimmung durch Spalte und Reihe zusammen. und besteht aus 4 Punkten, soweit ist mir das klar aber irgendwie krieg ich es nicht abstrahiert :(
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Dienstag 26. April 2011, 23:32

Wenn ich recht verstehe geht es dir eigentlich nur um folgende Funktion:

Code: Alles auswählen

color = decide_color(row, col, s)
Im Grunde ist die Sache recht einfach. Du musst entscheiden ob der Stein innerhalb des Kreises liegt oder nicht. Anders formuliert: liegt der Stein innerhalb oder außerhalb, des Radius des Kreises. Oder noch anders formuliert: Hat die Position des aktuellen Steines eine größere Distanz zum Mittelpunkt des Kreis als der Radius des Kreises, dann liegt er außerhalb. Ansonsten gehört er zum Kreis. Ich hoffe das hilft.

MFG HerrHagen
BlackJack

Dienstag 26. April 2011, 23:39

@Toad: Wie HerrHagen schon sagte ist dieser Code für Dich im Grunde gar nicht wirklich interessant. Eben so wenig wie die Annahme Steine könnten nur teilweise betroffen sein. Es sei denn Du willst Antialiasing implementieren.
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 27. April 2011, 09:36

Hat jemand "japanische Flagge" gesagt? ^^
Das Leben ist wie ein Tennisball.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 27. April 2011, 12:05

Japnanische Flagge sagst du? Eigentlich müssts davon ne Re-Edition geben, mit neuen Programmiersprachen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Mittwoch 27. April 2011, 17:10

Bis jetzt gibt es dort Lösungen in OCaml, Python, x86-Assembler für Linux und für DOS, Elisp, Scheme, und Io. Sind also noch einige Sprachen "frei". :-)
Toad
User
Beiträge: 13
Registriert: Montag 18. April 2011, 07:50

Donnerstag 28. April 2011, 12:25

Habs noch an dem Abend selbst gelöst bekommen:

Code: Alles auswählen

def decide_color_japan(x, y, size):
        Mx = size/2
        My = size/2
        radius = 50

        length = sqrt((Mx-x)*(Mx-x)+(My-y)*(My-y))

        if (length<radius):
                      return "red"
        return "white"
Ist einfach der Punktvergleich ob im Kreis oder nicht
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Donnerstag 28. April 2011, 12:32

Dann solltest du aber nochmal drüber sehen, bei mir ist deine Fahne komplett rot.
Genauer gesagt *ist* die Fahne ein roter Kreis.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
BlackJack

Donnerstag 28. April 2011, 13:32

@Toad: Die feste 50 ist zumindest unschön. Ich würde den Radius auch in Abhängigkeit von `size` ausdrücken. Wenn man mit der Funktion zum Beispiel ein 32×32 Pixel grosses Icon berechnen lassen will, ist die 50 deutlich zu gross.
Antworten