Проблема с решением программы с использованием радианов в модуле `math` - PullRequest
1 голос
/ 11 мая 2019

Я нашел вопрос по питону и столкнулся с проблемой правильного его решения.

Вопрос заключается в следующем.

В этой задаче вы будете использовать этот класс для вычисления чистойсила от 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)

1 Ответ

0 голосов
/ 11 мая 2019

Спасибо Michael O за помощь в комментариях.Класс ожидал градусов, а функция find_net_force отправляла угол в радианах. Я попытался использовать преобразование в градусы в find_net_force, и это сработало.

net_angle = round(degrees(atan2(total_vertical, total_horizontal)), 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...