Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ss14:dokumentation

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.

def Skalarprodukt(vector1, vector2):
	if(np.linalg.norm(vector1)!= 0 and np.linalg.norm(vector2)  != 0):
		array1 = np.array([vector1[0], vector1[1] ])
		array2 = np.array([vector2[0], vector2[1] ])
		dot=np.dot(array1,array2)
		array1_modulus = np.sqrt((array1*array1).sum())
		array2_modulus = np.sqrt((array2*array2).sum())
		cos = dot/array1_modulus/array2_modulus
	else:
		cos=0
	return cos

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).

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

Stufe 1 unserer(dokumentierten) Ausweichsfunktion: Das Ziel nun ist: Gassenbildung - ist bisher nicht der Fall

	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
ss14/dokumentation.txt · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)