Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
protokolle:20.12.18 [2018/12/20 17:48] fannyschauenburg |
protokolle:20.12.18 [2019/08/28 00:08] (aktuell) morningstar |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
20.12.18 | 20.12.18 | ||
- | Idee Version 1: | + | __**Idee Version 1:**__ |
* 1 Mensch in einem Raum | * 1 Mensch in einem Raum | ||
Zeile 7: | Zeile 7: | ||
* Raum auf Kivy erstellen | * Raum auf Kivy erstellen | ||
* In diesen Raum müssen wir den Menschen random platzieren, wobei der Mensch durch eine bestimmte Kraft definiert wird. | * In diesen Raum müssen wir den Menschen random platzieren, wobei der Mensch durch eine bestimmte Kraft definiert wird. | ||
- | + | ** | |
- | Umsetzung: | + | Umsetzung:** |
Gruppenaufteilung | Gruppenaufteilung | ||
Zeile 14: | Zeile 14: | ||
* gerichtete Bewegung | * gerichtete Bewegung | ||
- | Raum: | + | **Raum:** |
- | Gerichtete Bewegung: | + | **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. | 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__ | ||
+ | <code> | ||
+ | # 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() | ||
+ | </code> | ||
+ | |||
+ | __Mover__ | ||
+ | <code> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | |||
+ | |[[protokolle:13.12.18|Zurück]] | [[protokolle:10.01.19|Weiter]]| | ||