Benutzer-Werkzeuge

Webseiten-Werkzeuge


protokolle:20.12.18

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
protokolle:20.12.18 [2018/12/20 15:17]
fannyschauenburg angelegt
protokolle:20.12.18 [2019/08/28 00:08] (aktuell)
morningstar
Zeile 1: Zeile 1:
 20.12.18 20.12.18
  
-Festgelegte Übung+__**Idee Version 1:**__ 
-1 Mensch in einem Raum + 
-Mensch soll gerichtet auf den Ausgang sein +  ​* ​1 Mensch in einem Raum 
-Raum auf Kivy erstellen +  ​* ​Mensch soll gerichtet auf den Ausgang sein 
-in diesen Raum müssen wir den Menschen random platzieren, wobei der Mensch durch eine bestimmte Kraft definiert wird.+  ​* ​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__ 
 +<​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]]|
  
protokolle/20.12.18.1545315463.txt.gz · Zuletzt geändert: 2018/12/20 15:17 von fannyschauenburg