xturtle farbe auslesen

Fragen zu Tkinter.
Benutzeravatar
LP640
User
Beiträge: 142
Registriert: Dienstag 29. September 2009, 14:40

hallo leute,
ich hab mal wieder ne frage
und zwar hab ich hier ersteinmal folgenden code:

Code: Alles auswählen

from xturtle import*
fillcolor("red")
begin_fill()
for i in range(4):
    forward(100)
    right(90)
end_fill()
goto(50,20)
##############################
if farbe bei position der turtle==rot:
    print"die farbe ist rot"
so, ab der zeile ############################## steht das, was ich nicht hinbekomme:
also wenn die turtle sich in dem roten viereck befindet, soll eine meldung kommen.

kann mir da jemand weiterhelfen???

mfg
LP640
userpython
User
Beiträge: 6
Registriert: Sonntag 15. November 2009, 16:27

warum willst du unbedingt, dass nur wenn die turtle im roten feld steht eine textmessage schreibt??
du müsstest wenn die position der turtle abspeichern bevor diese zeichnet und dann danach nochmal die position abfragen und dann mit größer kleiner eingrenezen und alle möglichkeiten abfragen

ich sage dir nur gleich das ist sehr viel zum schreiben
Benutzeravatar
LP640
User
Beiträge: 142
Registriert: Dienstag 29. September 2009, 14:40

also das mit größer kleiner zeichen ... , das hab ich mir auch schon gedacht aber das mit dem viereck war nur ein beispiel.
stell dir einfach vor, es wären überall auf dem bilschirm rote punkte in verschiedensten formen per zufall zerstreut, wie komm ich da dazu, dass der bei rot dann die meldung anzeigt?

mfg
LP640
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Warum machst du das dann mit dem Größer- und Kleinerzeichen und zeigst uns, wie weit du kommst? Als Anregung mal ein Code der testet ob sich ein Punkt auf einer Strecke AB befindet:

Code: Alles auswählen

def on_line(dot, line_start, line_end):
    if line_start <= dot <= line_end:
        return True
    else:
        return False

if __name__ == '__main__':
    A, B = 10, 42
    print on_line(12, A, B)
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Warum nicht einfach so:

Code: Alles auswählen

def on_line(dot, line_start, line_end):
    return line_start <= dot <= line_end
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

LP640 hat geschrieben:stell dir einfach vor, es wären überall auf dem bilschirm rote punkte in verschiedensten formen per zufall zerstreut, wie komm ich da dazu, dass der bei rot dann die meldung anzeigt?
Indem du z.B. eine Liste oder ein Set führst, das alle diese Punkte mit den benötigten Eigenschaften (z.B. Mittelpunkt, Radius, Farbe) enthält, du die Turtle immer nur in kleinen Schritten weiter bewegst und nach jeder Bewegung abfragst, ob sie sich zu nah an einem der roten Punkte befindet.

Eine Möglichkeit, die Farbe eines beliebigen Punktes im xturtle-Zeichenfenster (Canvas) abzufragen, gibt es nicht.
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

derdon hat geschrieben:Warum nicht einfach so:
Für mein einfaches Beispiel sicherlich. Aber das soll ja noch etwas komplizierter werden und dann muss man einfach mal schauen, ob man das noch hübsch in eine Zeile packen kann.
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

LP640 hat geschrieben:...rote punkte in verschiedensten formen...
:lol:
Benutzeravatar
LP640
User
Beiträge: 142
Registriert: Dienstag 29. September 2009, 14:40

naja anscheinend klappt das nicht so wie ich mirs gewünscht habe
trotzdem danke für eure hilfe
und ich hab auch schon wieder ne neue frage:

bei folgendem code habe ich das problem, dass wenn ich die datei per doppelklick ausführe, am anfang immer ganz kurz die turtle zu sehen ist. kann man das irgendwie vermeiden???

Code: Alles auswählen

from xturtle import*
hideturtle()
mainloop()
und gibt es irgendwie eine möglichkeit, dass python-programme oder besonders xturtle schneller ausgeführt werden???

mfg
LP640
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

LP640 hat geschrieben:bei folgendem code habe ich das problem, dass wenn ich die datei per doppelklick ausführe, am anfang immer ganz kurz die turtle zu sehen ist. kann man das irgendwie vermeiden???
IMHO nicht. Wenn du Frog statt turtle nimmst, schon.
LP640 hat geschrieben:und gibt es irgendwie eine möglichkeit, dass python-programme oder besonders xturtle schneller ausgeführt werden???
1. Algorithmen verbessern.
2. Auf xturtle verzichten.
3. Schnelleren Rechner kaufen.
BlackJack

Oder vielleicht auch nur `xturtle.speed()`, falls da jemand das Offensichtliche nicht gefunden haben sollte. :-)
Benutzeravatar
LP640
User
Beiträge: 142
Registriert: Dienstag 29. September 2009, 14:40

hi
Oder vielleicht auch nur `xturtle.speed()`, falls da jemand das Offensichtliche nicht gefunden haben sollte.
also so ein anfänger bin ich auch wieder nicht! :wink: :!:

ich hab das mal mit frog versucht, allerdings schaff ich es mit xturtle dennoch schneller, da ich hier den befehl: tracer() verwende.
gibt es sowas auch für frog???

mfg
LP640
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

LP640 hat geschrieben:ich hab das mal mit frog versucht, allerdings schaff ich es mit xturtle dennoch schneller, da ich hier den befehl: tracer() verwende. gibt es sowas auch für frog???
Jain. Du kannst speed auf "max" setzen, dann erzielst du bei unsichtbarem Frosch die maximal mögliche Geschwindigkeit - ich schätze, dass sich turtle und frog in Punkto Geschwindigkeit dann nicht mehr viel tun. Bei sichtbarem Frosch oder Turtle ist es immer verhältnismäßig langsam, weil die ganzen Zeichenoperationen animiert werden.

Ansonsten: Wie wär's mit Doku lesen? Es gibt eine dt. Dokumentation zum frog-Modul, wo das alles drinsteht ...
Benutzeravatar
LP640
User
Beiträge: 142
Registriert: Dienstag 29. September 2009, 14:40

hi
-doku bereits durchgelesen
-frog.speed="max" bereits gemacht: ist vielleicht schneller als bei turtle die geschwindigkeit auf max zu setzen aber ich mach das wie bereits gesagt mit tracer() und da kommt keine geschwindigkeitsveränderung ran. es geht mir auch nicht darum, zu sehen, wie sachen gezeichnet werden, sondern man macht erst tracer(0), dann kommen die ganzen zeichen-befehle und dann kommt tracer(1).
also alles erscheint dann sozusagen auf einmal nur bei umständlichen zeichnungen dauert das manchmal ne weile und ich wollte wissen, wie man das beschleunigen kann???

mfg
LP640
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

LP640 hat geschrieben:also alles erscheint dann sozusagen auf einmal nur bei umständlichen zeichnungen dauert das manchmal ne weile und ich wollte wissen, wie man das beschleunigen kann???
Dann kann ich mich nur wiederholen:
numerix hat geschrieben:1. Algorithmen verbessern.
2. Auf xturtle verzichten.
3. Schnelleren Rechner kaufen.
Benutzeravatar
LP640
User
Beiträge: 142
Registriert: Dienstag 29. September 2009, 14:40

hi
1. Algorithmen verbessern.
2. Auf xturtle verzichten.
3. Schnelleren Rechner kaufen.
1.das geht net mehr einfacher als es schon ist (oder kaum) :shock:
2.wie denn sonst??? :?:
3.reichen für python etwa core 2 quad und 8gb arbeitsspeicher nicht aus :wink:

naja wenns net schneller geht kann man eben nix machen
trotzdem vielen dank für eure hilfe

mfg
LP640
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

LP640 hat geschrieben:
1. Algorithmen verbessern.
2. Auf xturtle verzichten.
3. Schnelleren Rechner kaufen.
1.das geht net mehr einfacher als es schon ist (oder kaum) :shock:
2.wie denn sonst??? :?:
3.reichen für python etwa core 2 quad und 8gb arbeitsspeicher nicht aus
1. Das stimmt in den seltensten Fällen. Aber ohne Code kann dir da natürlich keiner helfen.
2. xturtle ist ja nichts weiter als ein Aufsatz für Tkinter, der speziell gedacht ist für die Heranführung von jungen Menschen an die Grafikprogrammierung. Du kannst stattdessen auch nur Tkinter benutzen und die Zeichenoperationen entsprechend mit Canvas-Methoden durchführen.
3. Kommt drauf an ...
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Zu 2.:
Nimm doch Pygame und schreibe eine eigene 'MiniTurtle' Klasse. Dazu braucht man doch nur Objektattribute wie Color, Position und Orientierung und Methoden wie 'forward()', 'turn()', 'set_color()', 'pen_up()' und 'pen_down()'.

Falls es Dich interessiert, was man mit dem Turtle-Prinzip so alles anstellen kann:
Stichwort Lindenmayer-Systeme

:wink:
yipyip
Benutzeravatar
LP640
User
Beiträge: 142
Registriert: Dienstag 29. September 2009, 14:40

hi

danke für den tipp
ich schau nochmal ob ich da was hinbekomme
aber ich hab noch kurz ne andre frage:
hier der code erstmal:

Code: Alles auswählen

>>> x=2.34589764184141414014019034184671242784231
>>> print"%.30f"%x
2.345897641841414100000000000000
wieso kommen nach der 16sten nachkommastelle nur noch nullen???
kann man das irgendwie vermeiden???

mfg
LP640
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

LP640 hat geschrieben:

Code: Alles auswählen

>>> x=2.34589764184141414014019034184671242784231
>>> print"%.30f"%x
2.345897641841414100000000000000
wieso kommen nach der 16sten nachkommastelle nur noch nullen???
kann man das irgendwie vermeiden???
Die Präzision von Fließkommazahlen ist beschränkt.

Lies das:
http://docs.python.org/tutorial/stdlib2 ... arithmetic
Antworten