当有半径时,求360度内每个角的x和y坐标

2022-12-01 04:14:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着做一段代码,在360度范围内找到每个角度的x和y坐标,当给定半径时,我觉得所有的数学都是正确的,它的执行是正确的,但是当我把它们和我放在计算器中的值进行比较时,它返回了错误的值

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)

Tags: 代码importcount错误pi半径数学math计算器角度printwhilecoordangleradians
2条回答

它给出了正确的答案。看看你举的例子;看起来错误的坐标是y坐标,在180度转弯时应为0:

6.123233995736766e-16

e-16是“乘以10的-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)
           )

你的计算器可能有板上的三角函数,或四舍五入到一定数量的数字。正如Ben Quigley已经详细说明的那样,您给定的值非常小。恰好是math.sin(math.pi))返回的相同值

math包通过对快速收敛的级数求和来实现非常精确的近似。由于计算机只存储一定数量的精度位,因此它们不能精确地表示每个实数,在这种情况下,它们只需舍入或截断到支持的位数(可能是64位)

根据您的需要,您可以接受几乎完全正确的答案,四舍五入到所需的位数,或者对角度进行特殊检查,在这些角度上,您希望得到比1万亿分之一精度更高的结果