Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

protokolle:20.12.18

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.

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/20.12.18.txt · Zuletzt geändert: 2019/08/28 00:08 von morningstar