Esempio n. 1
0
	def adjustVelocity(self):
		v1 = (self.normalVector-self.pos).normalized()
		v2 = (self.vel).normalized()
		try:
			angBw = math.acos(v1.dot(v2))*180/math.pi
			angBw = 0 if abs(angBw)<1 else angBw
		except:
			angBw = 180 if self.down else 0 
		ang = self.angle + 180 if angBw != 0 else self.angle
		ve= Vector(math.cos(0),math.sin(0))*self.vel.GetMagnitude()
		ve.rotate(Vector(0,0),ang)
		self.vel =ve
Esempio n. 2
0
class DiffRootVector(Vector):
	## ROOT IS A VECTOR
	def __init__(self,root,x,y,angle=0):
		super().__init__(x,y)
		self.root = root
		self.angle = math.degrees(math.atan((self.y)/self.x)) if self.x != 0 else 0
		self.angle = self.angle if angle == 0 else angle
		self.origMag = self.GetMagnitude()
		self.mag = self.clampMagnitude()
		self.sumX = (self.root.x + self.x)
		self.sumY = (self.root.y + self.y)
		self.finPos = Vector(self.sumX,self.sumY)
		self.finPos = self.finPos.rotate(self.root,angle) if angle != 0 else self.finPos;
		self.angle = self.angle + 180 if (self.sumY > self.root.y and self.sumX < self.root.x) or (self.sumY-self.root.y <= 0 and self.root.x > self.sumX) else self.angle
		if self.x == 0:
			if self.sumY > self.root.y:
				self.angle = 90
			else:
				self.angle = -90
		self.arrowVertices = self.GetAVertices()
	def GetAVertices(self):
		dist = 5
		x,y = self.root.x,self.root.y
		x1,y1 = x+self.x,y+self.y
		x2,y2 = x+(self.x-dist),y + self.y-dist
		x3,y3 = x+(self.x-dist),y + self.y+dist
		Vertices = [(Vector(x1,y1),Vector(x2,y2)),(Vector(x1,y1),Vector(x3,y3))]
		for i,(v1,v2) in enumerate(Vertices):
			nv1 = v1.rotate(self.finPos,self.angle)
			nv2 = v2.rotate(self.finPos,self.angle)
			Vertices[i] = (nv1,nv2)
		return Vertices


	def draw(self,screen):
		## MAKE THE COLOR DEPENDENT ON THE VECTOR's length
		## WOULD PROBABLY USE SOME SCALE FUCTION FOR DRAWING THE VECTOR
		#pygame.draw.line(screen,(self.r,0,self.b),(self.root.x,self.root.y),(self.sumX,self.sumY),2)
		pygame.draw.line(screen,(self.r,0,self.b),(self.root.x,self.root.y),(self.finPos.x,self.finPos.y),2)
		for v1,v2 in self.arrowVertices:
			pygame.draw.line(screen,(self.r,0,self.b),(v1.x,v1.y),(v2.x,v2.y),2)
	def clampMagnitude(self):
		maxMag = (w//2)/(scale)
		# maxMag = Vector(func1(w//scale,h//scale),func2(w//scale,h//scale)).GetMagnitude()
		mag = self.GetMagnitude()*(1+((scale-1)/100))
		ratio = mag/maxMag
		ratio = min(1,ratio)
		self.r = 255*ratio
		self.b = 255*(1-ratio)
		new = self.SetMag(np.clip(mag,0,20))
		self.x,self.y = new.x,new.y
		return new
Esempio n. 3
0
		# if keys[pygame.K_r]:
			# boid.pos = Vector(w//2,h//2)

		# if keys[pygame.K_w]:
		# print(pred)
		if pred == 0:
			dir += maxSpeed*Vector.up()
			boid.down = False
		# if keys[pygame.K_s]:
		elif pred == 1:
			dir += maxSpeed*Vector.down()
			boid.down = True


		if pred == 2:
		# if keys[pygame.K_a]:
		 	boid.UpdateAngle(-angleTurn)
		# if keys[pygame.K_d]:
		elif pred == 3:
		 	boid.UpdateAngle(angleTurn)
		ang = (boid.normalVector-boid.pos).heading()
		dir.rotate(Vector(0,0),ang+90)
		boid.applyForce(dir);

	if pop == []:
		torch.save(neat.population[neat.fitness.index(max(neat.fitness))].network, 'D:\\model_.pt')
		neat.population = neat.reproduce()
		pop = copy.copy(neat.population)
		setLandMarks(pop)