Esempio n. 1
0
    def get_obstacle_tangent_field(self, mytank, obj, r, s, b):

        d_edges, a_edges = self.__get_line_distances(mytank, obj)
        d_points = self.__get_point_distances(mytank, obj)

        d_close_edge = min(d_edges[0], d_edges[1], d_edges[2], d_edges[3])
        d_close_point = min(d_points[0], d_points[1], d_points[2], d_points[3])

        theta = a_edges[d_edges.index(
            d_close_edge
        )]  #distance b/w line and point is perpendicular unless distance is to a corner
        if d_close_point == d_close_edge:
            corner = d_points.index(d_close_point)
            #theta = get_angle(mytank, Point(obj[corner]))
            #theta = theta  pi/2.0 #to make tangential

        dx = 0
        dy = 0

        if d_close_edge < r:
            dx = -sign(cos(theta)) * float('inf')
            dy = -sign(sin(theta)) * float('inf')
        elif d_close_edge >= r and d_close_edge <= s + r:
            dx = -b * (s + r - d_close_edge) * cos(theta)
            dy = -b * (s + r - d_close_edge) * sin(theta)

        vector = Vector()
        vector.set_x_and_y(dx, dy)

        return vector
Esempio n. 2
0
	def get_obstacle_tangent_field(self, mytank, obj, r, s, b):
		
		d_edges, a_edges = self.__get_line_distances(mytank, obj)
		d_points = self.__get_point_distances(mytank, obj)
		
		d_close_edge = min(d_edges[0], d_edges[1], d_edges[2], d_edges[3])
		d_close_point = min(d_points[0], d_points[1], d_points[2], d_points[3])
		
		
		theta = a_edges[d_edges.index(d_close_edge)] #distance b/w line and point is perpendicular unless distance is to a corner
		if d_close_point == d_close_edge:
			corner = d_points.index(d_close_point)
			#theta = get_angle(mytank, Point(obj[corner]))
			#theta = theta  pi/2.0 #to make tangential
		
		dx = 0
		dy = 0
		
		if d_close_edge < r:
			dx = -sign(cos(theta))*float('inf')
			dy = -sign(sin(theta))*float('inf')
		elif d_close_edge >= r and d_close_edge <= s+r:
			dx = -b * (s + r - d_close_edge) * cos(theta)
			dy = -b * (s + r - d_close_edge) * sin(theta)
			
		vector = Vector()
		vector.set_x_and_y(dx, dy)
				
		return vector
Esempio n. 3
0
    def get_attract_field(self, mytank, obj, r, s, a):

        d = get_center_distance(mytank, obj)
        theta = get_angle(mytank, obj)

        dx = 0
        dy = 0

        if d > (s + r):
            dx = a * s * cos(theta)
            dy = a * s * sin(theta)
        elif d >= r:  #and d<=s+r
            dx = a * (d - r) * cos(theta)
            dy = a * (d - r) * sin(theta)
        #else dx = 0 dy = 0

        vector = Vector()
        vector.set_x_and_y(dx, dy)

        return vector
Esempio n. 4
0
	def get_attract_field(self, mytank, obj, r, s, a):
		
		d = get_center_distance(mytank, obj)
		theta = get_angle(mytank, obj)
		
		dx = 0;
		dy = 0
		
		if d > (s+r):
			dx = a * s * cos(theta)
			dy = a * s * sin(theta)
		elif d >= r: #and d<=s+r
			dx = a * (d-r) * cos(theta)
			dy = a * (d-r) * sin(theta)
		#else dx = 0 dy = 0
		
		vector = Vector()
		vector.set_x_and_y(dx, dy)
				
		return vector
Esempio n. 5
0
    def get_repulse_field(self, mytank, obj, r, s, b):

        d = get_center_distance(mytank, obj)
        theta = get_angle(mytank, obj)

        dx = 0
        dy = 0

        if d < r:
            dx = -sign(cos(theta)) * float('inf')
            dy = -sign(sin(theta)) * float('inf')
        elif d >= r and d <= s + r:
            dx = -b * (s + r - d) * cos(theta)
            dy = -b * (s + r - d) * sin(theta)

        #else dx, dy = 0

        vector = Vector()
        vector.set_x_and_y(dx, dy)

        return vector
Esempio n. 6
0
	def get_repulse_field(self, mytank, obj, r, s, b):
		
		d = get_center_distance(mytank, obj)
		theta = get_angle(mytank, obj)
		
		dx = 0
		dy = 0
		
		if d < r:
			dx = -sign(cos(theta))*float('inf')
			dy = -sign(sin(theta))*float('inf')
		elif d >= r and d <= s+r:
			dx = -b * (s + r - d) * cos(theta)
			dy = -b * (s + r - d) * sin(theta)
			
		#else dx, dy = 0
				
		vector = Vector()
		vector.set_x_and_y(dx, dy)
		
		return vector