Seite 1 von 1
Canvas Objekte "bemerken"
Verfasst: Donnerstag 20. Mai 2010, 17:45
von Maximilianibus
Ich denke mal, dass das hier reingehört, also rein damit.
Ich progge mit nem freund ein programm, so eine art virtuelle petrischale.
Jetzt haben wir ein problem: mutation usw. haben wir schon ausgeklügelt, aber beim "bemerken" von anderen objekten haperts.
habe schon was zur kollisionserkennung gefunden.
jetzt zum problem:
wie kann man es machen, dass z.b. ein kreis "daliegt" und x pixel weiter ein "futterteilchen" liegt, und der kreis sich darauf zubewegt.
Hilfe!?
Re: Canvas Objekte "bemerken"
Verfasst: Donnerstag 20. Mai 2010, 18:29
von Pascal
es gibt die Möglichkeit mit canvas.move(item, x-verschiebung, y-verschiebung) ein Objekt zu bewegen.
Im Zusammenhang mit -after(...) kannst du es wie eine Bewegung aussehen lassen.
Re: Canvas Objekte "bemerken"
Verfasst: Donnerstag 20. Mai 2010, 18:36
von Maximilianibus
ich weiss, wie ich es bewege.
aber wie erkenne ich das objekt? das ziel?
Re: Canvas Objekte "bemerken"
Verfasst: Donnerstag 20. Mai 2010, 18:56
von BlackJack
@Maximilianibus: Den Abstand von Deinem "Organismus" zu allen Futterteilchen ausrechnen und dann auf das zubewegen was am nächsten ist!? So etwas sollte man unabhängig von der GUI implementieren. Sonst ist Deine Simulation ja von `Tkinter` abhängig.
Re: Canvas Objekte "bemerken"
Verfasst: Donnerstag 20. Mai 2010, 19:11
von Maximilianibus
ja, ich werde mal schauen.
apropos, können mehrere python-skripte irgendwwelche parameter austauschen?
Re: Canvas Objekte "bemerken"
Verfasst: Donnerstag 20. Mai 2010, 19:15
von BlackJack
@Maximilianibus: Das wäre eher eine neue Frage für einen neuen Thread. Die Antwort ist ja.
Re: Canvas Objekte "bemerken"
Verfasst: Donnerstag 20. Mai 2010, 20:13
von Maximilianibus
danke trotzdem.
Re: Canvas Objekte "bemerken"
Verfasst: Freitag 21. Mai 2010, 23:50
von problembär
Wie war das noch ...
Die .create_...-Methoden geben eine Zahl zurück.
Das ist eine Id. Die kann man für
usw. verwenden.
Eine Id, sie zu finden, sie alle zu knechten,
ins Dunkel zu treiben und ewig zu binden.
sozusagen

...
Mehrere Items kann man auch mit einem Tag versehen.
Im Prinzip kann man so auf jedes Item auf dem Canvas zugreifen.
Gruß
Re: Canvas Objekte "bemerken"
Verfasst: Samstag 22. Mai 2010, 10:40
von Pascal
Vielleicht könnte dir auch die canvas.find_overlapping() - methode helfen
Re: Canvas Objekte "bemerken"
Verfasst: Samstag 22. Mai 2010, 10:54
von numerix
Pascal hat geschrieben:Vielleicht könnte dir auch die canvas.find_overlapping() - methode helfen
Kann sein, ist aber höchstens die zweitbeste Lösung.
BlackJack hat schon darauf hingewiesen, dass es sinnvoll ist, diese Erkennung von der graphischen Darstellung zu trennen. Praktisch könnte das so aussehen, dass man vom Kreis den Mittelpunkt und den Radius kennt und von jedem Futterteilchen die Position (und, falls es nicht als Punkt gedacht ist, die Bounding-Box oder Radius oder was weiß ich). Aus diesen Information lässt sich dann jederzeit das nächstgelegten Futterteilchen ermitteln - ganz ohne graphische Darstellung.
Re: Canvas Objekte "bemerken"
Verfasst: Samstag 22. Mai 2010, 11:07
von Pascal
numerix hat geschrieben:Pascal hat geschrieben:Vielleicht könnte dir auch die canvas.find_overlapping() - methode helfen
Kann sein, ist aber höchstens die zweitbeste Lösung.
BlackJack hat schon darauf hingewiesen, dass es sinnvoll ist, diese Erkennung von der graphischen Darstellung zu trennen. Praktisch könnte das so aussehen, dass man vom Kreis den Mittelpunkt und den Radius kennt und von jedem Futterteilchen die Position (und, falls es nicht als Punkt gedacht ist, die Bounding-Box oder Radius oder was weiß ich). Aus diesen Information lässt sich dann jederzeit das nächstgelegten Futterteilchen ermitteln - ganz ohne graphische Darstellung.
ja, das ist schon richtig. Aber wenn´s nichts aufwendiges oder umfangreiches werden soll, dann ist man mit find_overlapping eigentlich gut dabei.