(для контекста) Мы попросили: Определить метод с именем move (). Он должен принять объект Movement и соответствующим образом обновить местоположение. Предположим, что линейная скорость в метрах в секунду, а угловая скорость в радианах в секунду. Чтобы упростить задачу, рассмотрим робота как безразмерную точку на плоскости. Кроме того, предположим, что угловая скорость оценивается в первую очередь так, что робот вращается первым, прежде чем двигаться вперед или назад.
import math
class Movement(object):
"""A class describing a TurtleBot's movement
@param linear_velocity in the range [-0.22, 0.22]
@param angular_velocity in the range [-2.84, 2.84]
@param duration in seconds, [0, +inf)
"""
MAX_LIN_VEL = 5.0
MAX_ANG_VEL = 2*math.pi
def __init__(self, linear_velocity=0, angular_velocity=0, duration=1):
# Check inputs
self._linear_velocity = linear_velocity
self._angular_velocity = angular_velocity
self._duration = duration
if not abs(linear_velocity) <= self.MAX_LIN_VEL:
print('Invalid linear_velocity, set to 0')
self._linear_velocity = 0
if not abs(angular_velocity) <= self.MAX_ANG_VEL:
print('Invalid angular_velocity, set to 0')
self._angular_velocity = 0
if duration <= 0:
print('Invalid duration, set to 0')
self._duration = 0
def __str__(self):
return "Movement(linear_velocity=" + str(self._linear_velocity) + ", angular_velocity=" + str(self._angular_velocity) + ", duration=" + str(self._duration) + ")"
def get_linear_velocity(self):
return self._linear_velocity
def get_angular_velocity(self):
return self._angular_velocity
def get_duration(self, unit="s"):
if unit == "ms":
return self._duration * 1000
elif unit == "m":
return self._duration / 60
else:
if not unit == "s":
print("Invalid unit. Unit set to seconds.")
return self._duration
class MobileRobot:
def __init__(self, x=0, y=0, angle=0):
self._x = x
self._y = y
self._angle = math.pi/2
def step_right(self):
self._x += 1
def step_left(self):
self._x -= 1
def step_up(self):
self._y += 1
def step_down(self):
self._y -= 1
def get_current_location(self):
return 'Location = (' + str(self._x) + ','+ str(self._y) + ')'
def return_to_origin(self):
self._x= 0
self._y= 0
self._angle= math.pi/2
def move(self, Movement):
duration = Movement.get_duration()
angular_velocity = Movement.get_angular_velocity()
self._angle += angular_velocity * duration + self._angle
distance = Movement.get_linear_velocity() * Movement.get_duration()
self._x += (distance * math.cos(self._angle))
self._y += (distance * math.sin(self._angle))
print(Movement(0.1))
robot1 = MobileRobot()
move1 = Movement(1,math.pi/2,1)
robot1.move(move1)
print(robot1.get_current_location())
Вывод должен был быть:
Movement(linear_velocity=0.1, angular_velocity=0, duration=1)
None
(-1.0, 1.2246467991473532e-16)
Но я получаю следующее:
Movement(linear_velocity=0.1, angular_velocity=0, duration=1)
Location = (-1.8369701987210297e-16,-1.0)
Я совершенно сбит с толку, почему хи у меня взаимозаменяемо, и я не могу точно определить ошибку.