Я нашел вопрос по питону и столкнулся с проблемой правильного его решения.
Вопрос заключается в следующем.
В этой задаче вы будете использовать этот класс для вычисления чистойсила от list
сил.
Напишите функцию с именем find_net_force
.find_net_force
должен иметь один параметр: list
экземпляров Force
.Функция должна возвращать новый экземпляр Force
с суммарной чистой величиной и углом нетто в качестве значений для ее атрибутов величины и угла.
В качестве напоминания:
- НайтиВеличина чистой силы, суммируйте все горизонтальные компоненты и суммируйте все вертикальные компоненты.Чистая сила - это квадратный корень из суммы квадратов горизонтальных сил и вертикальных сил (то есть
(total_horizontal<sup>2</sup> + total_vertical<sup>2</sup>)<sup>0.5</sup>
) - Чтобы найти угол чистой силы, вызовите
atan2
с двумя аргументами:общие вертикальные и общие горизонтальные силы (в этом порядке).Не забудьте округлить величину и направление до одного десятичного знака.Это можно сделать с помощью округления (величина, 1) и округления (угол, 1). - Класс
Force
имеет три метода: get_horizontal
возвращает горизонтальный компонент одной силы.get_vertical
возвращает вертикальную составляющую одной силы.get_angle
возвращает угол одной силы в градусах (или в радианах, если вы вызываете get_angle(use_degrees=False)
. - СОВЕТ: не усложняйте это. Класс Force выполняет множество функций, кроме
atan2
, degree
s, и radians
.
Я попытался использовать следующий код, чтобы решить его, и получаю другой результат для get_angle
. Я пытался изменить вещи с радианами, градусами без правильного результата.
from math import atan2, degrees, radians, sin, cos
class Force:
def __init__(self, magnitude, angle):
self.magnitude = magnitude
self.angle = radians(angle)
def get_horizontal(self):
return self.magnitude * cos(self.angle)
def get_vertical(self):
return self.magnitude * sin(self.angle)
def get_angle(self, use_degrees = True):
if use_degrees:
return degrees(self.angle)
else:
return self.angle
def find_net_force(force_instances):
total_horizontal = 0
total_vertical = 0
for instance in force_instances:
total_horizontal += float(instance.get_horizontal())
total_vertical += float(instance.get_vertical())
net_force = round((total_horizontal ** 2 + total_vertical ** 2) ** 0.5, 1)
net_angle = round(atan2(total_vertical, total_horizontal), 1)
total_force = Force(net_force, net_angle)
return total_force
force_1 = Force(50, 90)
force_2 = Force(75, -90)
force_3 = Force(100, 0)
forces = [force_1, force_2, force_3]
net_force = find_net_force(forces)
print(net_force.magnitude)
print(net_force.get_angle())
Ожидаемый результат:
103.1
-14.0
Фактический результат, который я получил:
103.1
-0.2
Обновление:
БлагодаряМайкл О. Класс ожидал градусов, а функция find_net_force
отправляла угол в радианах. Я попытался использовать преобразование в градусы в find_net_force
, и это сработало.
net_angle = round(degrees(atan2(total_vertical, total_horizontal)), 1)