найти координаты X и Y для каждого угла в пределах 360 градусов, когда у вас есть радиус - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь создать фрагмент кода, в котором он находит координаты x и y для каждого угла в пределах 360 градусов, когда вы получаете радиус. Я чувствую, что все математические вычисления верны, и исключение правильное, однако возвращаетсянеправильные значения, когда я сравниваю их со значениями, которые я положил в свой калькулятор

import math

print (math.pi)

r = 5

angle = 0
count = 0

while angle <= 360:


    angle_radians = math.radians(angle)

    x_coord = math.cos(angle_radians)*r

    y_coord = math.sin(angle_radians)*r
    print ("Position [",x_coord,",",y_coord,"]")
    angle +=1
    count +=1
    print(count)

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Ваш калькулятор, вероятно, имеет встроенные функции триггера или округляет до определенного количества цифр.Ваше заданное значение действительно мало, как уже подробно описал Бен Куигли.Это то же самое значение, которое возвращается math.sin(math.pi)).

. Пакет math дает очень точное приближение путем суммирования быстро сходящихся рядов.Поскольку компьютеры хранят только определенное количество битов точности, они не могут точно представлять каждое действительное число - они просто округляют или усекают до поддерживаемого числа битов - вероятно 64биты, в данном случае.

В зависимости от ваших потребностей, вы можете принять почти точный ответ, округлить до нужного числа цифр или сделать специальные проверки для углов, при которых вы хотите, чтобы результат был более точным, чем единица.часть в один квадриллион.

0 голосов
/ 29 ноября 2018

Это дает правильный (иш) ответ.Посмотрите на пример, который вы дали;координата, которая выглядит неправильно, является координатой y, которая должна быть 0 при повороте на 180 градусов:

6.123233995736766e-16

То, что e-16 - это научное обозначение для "умножения на десять от степени -16".Итак, это число эквивалентно .00000000000000006123233...

Почему оно не возвращает ровно 0?Из-за особенностей в том, как Python обрабатывает плавающие объекты.

Если вам не нужна такая большая точность, вы можете получить более удобочитаемые результаты, переписав свою функцию для использования round, например:

def coords_from_degree(line, angle):
    a = math.radians(angle)
    return (round(math.cos(a)*r, 4), 
            round(math.sin(a)*r, 4)
           )
...