Seite 1 von 2
xturtle farbe auslesen
Verfasst: Dienstag 17. November 2009, 16:18
von LP640
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
Verfasst: Dienstag 17. November 2009, 19:19
von userpython
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
Verfasst: Dienstag 17. November 2009, 19:43
von LP640
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
Verfasst: Dienstag 17. November 2009, 21:03
von gkuhl
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)
Verfasst: Dienstag 17. November 2009, 21:40
von derdon
Warum nicht einfach so:
Code: Alles auswählen
def on_line(dot, line_start, line_end):
return line_start <= dot <= line_end
Verfasst: Dienstag 17. November 2009, 21:54
von numerix
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.
Verfasst: Dienstag 17. November 2009, 21:55
von gkuhl
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.
Verfasst: Mittwoch 18. November 2009, 09:30
von Pascal
LP640 hat geschrieben:...rote punkte in verschiedensten formen...

Verfasst: Samstag 21. November 2009, 00:15
von LP640
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???
und gibt es irgendwie eine möglichkeit, dass python-programme oder besonders xturtle schneller ausgeführt werden???
mfg
LP640
Verfasst: Samstag 21. November 2009, 07:50
von numerix
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.
Verfasst: Samstag 21. November 2009, 11:09
von BlackJack
Oder vielleicht auch nur `xturtle.speed()`, falls da jemand das Offensichtliche nicht gefunden haben sollte.

Verfasst: Samstag 21. November 2009, 13:28
von LP640
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!
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
Verfasst: Samstag 21. November 2009, 16:25
von numerix
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 ...
Verfasst: Samstag 21. November 2009, 16:32
von LP640
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
Verfasst: Samstag 21. November 2009, 17:20
von numerix
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.
Verfasst: Samstag 21. November 2009, 22:40
von LP640
hi
1. Algorithmen verbessern.
2. Auf xturtle verzichten.
3. Schnelleren Rechner kaufen.
1.das geht net mehr einfacher als es schon ist (oder kaum)
2.wie denn sonst???
3.reichen für python etwa core 2 quad und 8gb arbeitsspeicher nicht aus
naja wenns net schneller geht kann man eben nix machen
trotzdem vielen dank für eure hilfe
mfg
LP640
Verfasst: Sonntag 22. November 2009, 08:10
von numerix
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)
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 ...
Verfasst: Sonntag 22. November 2009, 14:13
von yipyip
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
yipyip
Verfasst: Sonntag 22. November 2009, 18:44
von LP640
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
Verfasst: Sonntag 22. November 2009, 19:01
von /me
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