Я пытаюсь найти несколько (x, y) координат радиана, и угол окружности задается с (0,0), являющимся центром круга. Допустим, радиан = 4, угол = 360 / n
Мне нужно несколько координат, что означает, что если n = 4, то мой угол будет 90 градусов. Поэтому мне нужны координаты x, y не только под углом 90 градусов, но и под углом 90,180,270,360 градусов.
Точно так же, если мой 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 ответов
Я собираюсь сделать это без 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]
Чтобы получить все разделы на 360 °, вы можете использовать понимание списка над range(0, 360, 360//n)
. Кроме того, вместо использования sin
и cos
вы можете использовать cmath
для получения комплексных чисел в полярных координатах.
>>> 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)]
Вы должны быть в состоянии использовать цикл для перебора [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)
А вот как ты это делаешь в 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])
Мои несколько центов на вашу проблему:
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
, чтобы убедить себя, что он дает то, что вы хотите.
Вы можете выполнить итерацию по всем под углам и затем получить кортежи пар 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
Похожие вопросы
Новые вопросы
python
Python - это мультипарадигмальный динамически типизированный многоцелевой язык программирования, разработанный для быстрого (для изучения, использования и понимания) и для обеспечения чистого и унифицированного синтаксиса. Обычно используются две похожие, но несовместимые версии Python, Python 2.7 и 3.x. Для специфичных для версии вопросов Python добавьте тег [python-2.7] или [python-3.x]. При использовании варианта или библиотеки Python (например, Jython, PyPy, Pandas, Numpy), пожалуйста, включите их в теги.