Benutzer-Werkzeuge

Webseiten-Werkzeuge


ss14:dokumentation

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ss14:dokumentation [2014/07/03 17:59]
p.kugelstadt
ss14:dokumentation [2016/05/10 14:46] (aktuell)
Zeile 13: Zeile 13:
  return cos  return cos
  
 +</​code>​
 +
 +Diese Funktion prüft, ob ein Mensch(hier:​ Kontrahent) in einem Radius von 20 Einheiten im Blickfeld (also höchstens 30° von der Blickrichtung) vorhanden ist. Ist es dieser wird er in die Liste der Kontrahenten übergeben, welche anschließend zurückgegeben wird. Hinzugefügt zur Liste werden diejenigen, welche einen direkten Kontakt zur Person haben(sprich die Kugeln überlappen sich).
 +
 +<code python>
 +def MenschMensch(self):​
 + Kontrahenten=[]
 + for Mensch in Liste_Menschen:​
 + if(Mensch != self):
 + if(np.linalg.norm(vector(self.x,​ self.y,0) - vector(Mensch.x,​ Mensch.y,​0)) < 20):
 + cos_Winkel = Skalarprodukt(-vector(self.x,​ self.y,​0)+vector(Mensch.x,​ Mensch.y,​0),​vector(self.vx,​ self.vy,0))
 + if(cos_Winkel>​=np.sqrt(3)/​2. or np.linalg.norm(vector(self.x,​ self.y,0) - vector(Mensch.x,​ Mensch.y,​0)) < 4):
 + Kontrahenten.append(Mensch)
 + return Kontrahenten
 +</​code>​
 +
 +Stufe 1 unserer(dokumentierten) Ausweichsfunktion:​
 +Das Ziel nun ist: Gassenbildung ​ -  ist bisher nicht der Fall
 +
 +<code python>
 + def Ausweichen(self,​Liste):​
 + '''​Gibt einen Geschwindigkeitsvektor zurueck, braucht einen Menschen und eine Liste von sichtbaren Mitmenschen(Kontrahenten)'''​
 + Ziel = self.eigenschaften['​Ziel'​]
 + Kraft = self.eigenschaften['​Lieblingsgeschwindigkeit'​] * (Ziel-vector(self.x,​self.y,​0))/​np.linalg.norm(Ziel-vector(self.x,​self.y,​0) )
 + for einzelner in Liste:
 + Gustav = vector(self.x-einzelner.x,​self.y - einzelner.y,​0) ​  #​Vektor von einem anderen Menschen zum '​Fuessgaenger'​
 + Kraft += (self.eigenschaften['​Abstossungskonstante'​]*Gustav *1/​(np.linalg.norm(Gustav)**3)) *(1-Skalarprodukt(Ziel-vector(self.x,​self.y,​0),​vector(einzelner.vx,​einzelner.vy,​0))) #/​len(Liste)
 + if((np.linalg.norm(Gustav))<​4):​
 + Kraft += 1000*Gustav*1/​(np.linalg.norm(Gustav))/​(10*len(Liste))
 + if(np.linalg.norm(Kraft) > 6/3.6):
 + Kraft = (Kraft/​np.linalg.norm(Kraft))*6/​3.6
 + return Kraft
 </​code>​ </​code>​
ss14/dokumentation.1404403195.txt.gz · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)