python使用弧度找到x,y坐标,给定角度

时间:2018-08-20 15:00:03

标签: python coordinates

如果圆的弧度和角度以(0,0)为圆心,则我试图找到多个(x,y)坐标。 可以说, 弧度= 4,角度= 360 / n

我需要多个坐标,这意味着如果我的n = 4,那么我的角度将是90度。因此,我不仅需要90度的x,y坐标,而且需要90,180,270,360度的x,y坐标。

类似地,如果我的n = 6,那么我需要x,y坐标为360/6 = 60。因此,每+60度到360度。示例x,y坐标分别为60、120、180、240、300、360。

我只知道如何为一个天使做这件事,这就是我尝试过的

import math

number = 4
Angles_req = (360/number)
radius = 4

x = round(4*math.cos(360/number), 2)
y = round(4*math.sin(360/number), 2)

任何帮助将不胜感激。谢谢!

6 个答案:

答案 0 :(得分:1)

我将在没有 numpy 的情况下进行此操作,尽管这样会更容易

import math

def circle_sections(divisions, radius=1):
    # the difference between angles in radians -- don't bother with degrees
    angle = 2 * math.pi / divisions

    # a list of all angles using a list comprehension
    angles = [i*angle for i in range(divisions)]

    # finally return the coordinates on the circle as a list of 2-tuples
    return [(radius*math.cos(a), radius*math.sin(a)) for a in angles]

输出

circle_sections(4)

#[(1.0, 0.0),
# (6.123233995736766e-17, 1.0),
# (-1.0, 1.2246467991473532e-16),
# (-1.8369701987210297e-16, -1.0)]

circle_sections(6)

#[(1.0, 0.0),
# (0.5000000000000001, 0.8660254037844386),
# (-0.4999999999999998, 0.8660254037844387),
# (-1.0, 1.2246467991473532e-16),
# (-0.5000000000000004, -0.8660254037844384),
# (0.4999999999999993, -0.866025403784439)]

我没有在这里四舍五入,因为通常这只是您要格式化的内容,但是如果您愿意,只需

return [(round(radius*math.cos(a), 2), round(radius*math.sin(a), 2)) for a in angles]

答案 1 :(得分:1)

这是您在numpy中执行的操作:

import numpy as np 
import math

radius = 4
number = 4
rad = np.radians(np.linspace(360/number,360,number))
xy = radius *np.array([[math.cos(x),math.sin(x)] for x in rad])

答案 2 :(得分:0)

您应该可以使用循环遍历[1,n]。

例如:

import math

n = 4
r = 4

for i in range(1, n + 1):
    theta = math.radians((360 / n) * i)
    x = round(r * math.cos(theta), 2)
    y = round(r * math.sin(theta), 2)

答案 3 :(得分:0)

您可以遍历所有子角度,然后生成x,y对的元组。

def divide_angle(num_units, angle=360):
    for unit in range(num_unit):
        sub_angle = (unit+1)*angle//unit
        x = round(4*math.cos(sub_angle), 2)
        y = round(4*math.sin(sub_angle), 2)
        yield x,y

答案 4 :(得分:0)

我为您的问题所付出的代价:

n = 6
step = int(360/n)
for i in range(step, 361, step):
    angle = math.radians(i)
    x = round(4*math.cos(angle), 2)
    y = round(4*math.sin(angle), 2)
    # Do something with x and y

您可以尝试打印angle以使自己确信它可以满足您的要求。

答案 5 :(得分:0)

要获得360°的所有截面,可以在range(0, 360, 360//n)上使用列表理解。另外,您可以使用sin来获取极坐标中的复数,而不是使用coscmath

>>> radius, n = 4, 3

>>> [cmath.rect(radius, math.radians(a)) for a in range(0, 360, 360//n)]
[(4+0j),
 (-1.9999999999999991+3.464101615137755j),
 (-2.0000000000000018-3.4641016151377535j)]

这对于在这些点上进行进一步的计算也可能很有用,例如添加它们。如果您喜欢(舍入的)元组,则可以使用嵌套列表理解:

>>> [(round(c.real, 2), round(c.imag, 2))
...  for c in (cmath.rect(radius, math.radians(a)) for a in range(0, 360, 360//n))]
[(4.0, 0.0), (-2.0, 3.46), (-2.0, -3.46)]