20.12.18 __**Idee Version 1:**__ * 1 Mensch in einem Raum * Mensch soll gerichtet auf den Ausgang sein * Raum auf Kivy erstellen * In diesen Raum müssen wir den Menschen random platzieren, wobei der Mensch durch eine bestimmte Kraft definiert wird. ** Umsetzung:** Gruppenaufteilung * Raumerstellung * gerichtete Bewegung **Raum:** **Gerichtete Bewegung:** Wir haben uns das Kivy Beispielprogramm mit einem Thread angeschaut, und eine Richtung eingebaut. Unsere Punkte(Menschen) werden per Klick in unsere Grafik hinzugefügt und bewegen sich darauf hin in die Richtung unseres Zielpunktes (0,0). Die Geschwindigkeit ist dabei gleichbleibend. {{protokolle:gerichtete_bewegung.png}} **Code:** __Hauptprogramm__ # coding: utf-8 from __future__ import division from kivy.app import App from kivy.uix.widget import Widget from kivy.uix.button import Button from kivy.graphics import Color, Ellipse from kivy.core.window import Window import numpy as np from move_it import Mover import threading circles = [] ziel= np.array([0,0]) class MyPaintWidget(Widget): color = (1,0,0) def on_touch_down(self, touch): '''Bei Mausklick wird ein Kreis gezeichnet, das Objekt wird in die globale Liste circles aufgenommen''' with self.canvas: Color(*self.color, mode='rgb') d = 30. circles.append(Ellipse(pos=(touch.x - d / 2, touch.y - d / 2), size=(d, d))) class MyPaintApp(App): '''Hier wird MyPaintWidget instantiiert und ein Knopf definiert, der mit der Methode forward verbunden wird.''' def build(self): Window.clearcolor = (1,1,1,1) self.parent = Widget() self.painter = MyPaintWidget() nextbtn = Button(text='Next', size=(50,50), pos=(0,0)) nextbtn.bind(on_release=self.forward) self.parent.add_widget(self.painter) self.parent.add_widget(nextbtn) return self.parent def forward(self,obj): '''bewegt alle bislang gezeichneten Kreise zufällig''' for circ in circles: circ.pos = (circ.pos[0]+np.random.randn()*20,circ.pos[1]+np.random.randn()*20) if __name__ == '__main__': thread1 = threading.Thread(target=Mover, args=(circles,)) thread1.start() MyPaintApp().run() __Mover__ import numpy as np import time class Mover(object): def __init__(self, circles): self.circles = circles self.v = 5 while True: time.sleep(0.1) for circ in self.circles: richtung = np.array((-circ.pos[0],-circ.pos[1])) richtung = 1/np.linalg.norm(richtung) * richtung circ.pos = (circ.pos[0]+self.v*richtung[0],circ.pos[1]+self.v*richtung[1]) print circ.pos |[[protokolle:13.12.18|Zurück]] | [[protokolle:10.01.19|Weiter]]|