def single_vector(): vec = numpy.array( [ 1.0, 1.0, 1.0 ] ) length = 2.0 result = vector.set_length( vec, length ) current_length = numpy.array( [ math.sqrt( numpy.sum( vec ** 2 ) ) ] ) expected = (vec / current_length) * 2.0 self.assertTrue( numpy.array_equal( result, expected ), "Vector length not set correctly" )
def batch_vector(): vec = numpy.array( [ 1.0, 1.0, 1.0 ] ) length = 2.0 batch = numpy.tile( vec, (3,1) ) result = vector.set_length( batch, length ) current_length = numpy.array( [ math.sqrt( numpy.sum( vec ** 2 ) ) ] ) expected = (vec / current_length) * 2.0 expected = numpy.tile( expected, (3,1) ) self.assertTrue( numpy.array_equal( result, expected ), "Vector length not set correctly" )
def _set_velocity_for_speed_and_direction(self, speed: float, direction: float): # get the heading dx = self.model.target_x - self.model.ball.x dy = self.model.target_y - self.model.ball.y # direction is meaningless if we're already at the target if (dx != 0) or (dy != 0): # set the magnitude vel = vector.set_length([dx, dy, 0.0], speed) # rotate by direction around Z-axis at ball position rot = matrix33.create_from_axis_rotation([0.0, 0.0, 1.0], direction) vel = matrix33.apply_to_vector(rot, vel) # unpack into ball velocity self.model.ball_vel.x = vel[0] self.model.ball_vel.y = vel[1] self.model.ball_vel.z = vel[2]
def length(self, length): self[:] = vector.set_length(self, length)