Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ss14:dokumentation [2014/07/03 17:59] p.kugelstadt angelegt |
ss14:dokumentation [2016/05/10 14:46] (aktuell) |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
Hiermit berechnen wir den Kosinus des Winkels zwischen zwei Vektoren, falls einer der Vektoren der Nullvektor ist, wird der Kosinus des Winkels zwischen den Vektoren auf NULL gesetzt. | Hiermit berechnen wir den Kosinus des Winkels zwischen zwei Vektoren, falls einer der Vektoren der Nullvektor ist, wird der Kosinus des Winkels zwischen den Vektoren auf NULL gesetzt. | ||
- | [code] | + | <code python> |
def Skalarprodukt(vector1, vector2): | def Skalarprodukt(vector1, vector2): | ||
if(np.linalg.norm(vector1)!= 0 and np.linalg.norm(vector2) != 0): | if(np.linalg.norm(vector1)!= 0 and np.linalg.norm(vector2) != 0): | ||
Zeile 13: | Zeile 13: | ||
return cos | return cos | ||
- | [/code] | + | </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> |