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]]|