как сделать генерацию объектов от градуса?
суть моей проблемы находится в том, что я не могу понять как сделать генерацию "платформы" по радиусу (или градусу, я их не особо отличаю). вот как примерно оно должно выглядеть:
(45 градусов я взял для примера)
а вот мой код, который работает не так как надо:
def pl(x,y):
pf1 = block(x,y)
entities.add(pf1)
blocks.append(pf1)
def no(x,y,rasx,rasy,w,s,s2,el):
ddd=0
while ddd < el:
if x>=rasx+s:
y-=w
rasx+=s
if y>=rasy+s2:
x=x-w
rasy+=s2
x=x+w
y=y+w
pl(x,y)
ddd+=1
#ddd - это кол - во условно имеющихся "блоков"
x,y=100,100
no(x,y,3,5,3,250,30,100)
rasx - это расстояние по х (с какого момента начнётся вычислене по х)
rasy - это расстояние по у (с какого момента начнётся вычислене по у)
w - это ширина квадрата
s - это расстояние по х ( if х >= х+s: у+=w; x+=s)
s2 - это расстояние по у ( if у >= у+s2: у+=w; у+=s2)
el - количество "болков".
Вместо "no" может быть любое другое имя.
В функции "pl" просто происходит "создание" "платформы"
В функции "no" происходят вычисления (кривые), которым я не очень рад.
прошу помогите мне, я, конечно, понимаю что это может быть сложно, но это для меня важно и определит буду ли я дальше работать над своим проектом.
Ответы (1 шт):
По определению sin и cos имеем:

Но в нашей задаче нужно это немного подкорректировать, т.к. точка (0, 0) соответствует верхней левой точке экрана. (Проще говоря, Oy идёт сверху вниз)
Таким образом, составляем код:
import math
def gen_platform_by_angle(x0:int, y0:int, alpha:int, r:int):
"""Generate one platform, on distance r from (x0, y0)"""
x1 = x0 + int(r*math.cos(alpha))
y1 = y0 + int(r*math.sin(alpha))
pl(x1, y1)
return (x1, y1) #Функция возвращает координаты новой платформы
Теперь будем рекурсивно вызывать эту функцию:
def gen_platforms_by_angle(x0:int, y0:int, alpha:int, r:int, q:int):
for i in range(1, q+1):
x0, y0 = gen_platform_by_angle(x0, y0, alpha, r)
Такая функция q раз создаст платформу, начиная с (х0, у0), на расстоянии r друг от друга.
Учитывая положение (0, 0), в переменной alpha должно содержаться -alpha, если бы мы считали в "математической" системе координат.