Генерация координат каждые 30 секунд

#python-3.x #for-loop #time #coordinates #sched

Вопрос:

Я очень новичок в python. Я хочу написать функцию, которая может выдавать координаты каждого круга каждые 30 секунд. До сих пор мой код выглядит так:

 import sched, time
import numpy as np
scheduler = sched.scheduler(time.time, time.sleep)
def coords():
   theta = np.linspace(0, 2*np.pi, 1000)
   radius = .5
   x = radius * np.sin( theta ) 
   y = radius * np.cos( theta ) 
   z = 4.2
   pos = []
   for i in range (0, 1000):
      pos = (x[i], y[i], z)
      i =1
      #print(pos)

e1 = scheduler.enter(1, 1, coords)
e2 = scheduler.enter(30, 1, coords)
 

Я не уверен, что делаю не так, пожалуйста, помогите!
Спасибо.

Редактирование для предоставления дополнительных кодов:

 import time
import numpy as np

def distance(a, b):
    distance = np.sqrt((a[0]-b[0])*(a[0]-b[0]) (a[1]-b[1])* 
    (a[1]- b[1]) (a[2]-b[2])*(a[2]-b[2]))
    return distance

def coords():
    theta = np.linspace(0, 2*np.pi, 1000)
    radius = .5
    x = radius * np.sin( theta ) 
    y = radius * np.cos( theta ) 
    z = 4.2
    pos = []
    for i in range (0, 1000):
       pos = (x[i], y[i], z)
 return pos
    
 def main():
    goal = np.array([3.6528202764153976, -7.055446756786874524, 
       8.52021764])
    current = coords()
    print(current)
    while True:
       dis = distance(goal,current)
       print(dis)
       time.sleep(3)

  if __name__ == "__main__":
       main()
 

Комментарии:

1. Он работает, (0.0, 0.5, 4.2) 9.438863921224838 печатается каждые 3 секунды. Вы хотите, чтобы coords() возвращал список всех сгенерированных позиций(а не только последнюю)?

2. И в main() вы хотите, чтобы ток приближался к цели вот так?: [0.0, 0.5, 4.2] 9.438863921224838 [0.0031447166580338753, 0.4999901106593416, 4.2] 9.437639450965634 [0.006289308919370529, 0.49996044302856274, 4.2] 9.436400082070367 [0.009433652392233545, 0.4999109982812366, 4.2] 9.435145857703839

3. Привет @LazyBumQ, Да, я хочу, чтобы coords() возвращал список всех сгенерированных позиций(не только последней) каждые 3 секунды, чтобы main() могла рассчитать расстояние от цели. Но coords() возвращает только одну позицию! Есть какие-нибудь советы?

4. Изменил свой ответ, это должно сработать. Спросите, нужны ли вам дополнительные объяснения.

Ответ №1:

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

 while True:
    coords()
    time.sleep(30)
 

Также нет смысла увеличивать i, python делает это автоматически.

 for i in range (0, 1000):
    pos = (x[i], y[i], z)
    #i =1
 

Если вы хотите, чтобы функция coords() возвращала список всех позиций, вам не нужно переназначать pos каждый цикл. Просто добавьте один pos в список pos.

 pos = []
for i in range(1000):
    pos.append((x[i], y[i], z))
 

И не забудьте вернуть поз.
Также ваш «ток» не меняется во время циклов «пока». Поскольку функция coords() возвращает список позиций, вы можете повторить его:

 def main():
    goal = np.array([3.6528202764153976, -7.055446756786874524, 8.52021764])
    for current in coords(): 
        # current = coords() 
        print(current) 
        dis = distance(goal,current)
        print(dis)
        time.sleep(3)
 

Комментарии:

1. Спасибо @LazyBum Q, я попробую это сделать.

2. Привет еще раз, когда я вызываю координаты() из main, он выводит только последнее значение pos: (0,5, -1,2246467991473532 e-16, 4.2) (0,5, -1,2246467991473532 e-16, 4.2) (0,5, -1,2246467991473532 e-16, 4.2) (0,5, -1,2246467991473532 e-16, 4.2) (0,5, -1,2246467991473532 e-16, 4.2) (0,5, -1,2246467991473532 e-16, 4.2) (0,5, -1,2246467991473532 e-16, 4.2) (0,5, -1.2246467991473532 e-16, 4.2) (0.5, -1.2246467991473532 e — 16, 4.2) (0.5, -1.2246467991473532 e-16, 4.2) — вот так. не знаю, что я делаю не так. Есть какие-нибудь советы?

3. Пожалуйста, посмотрите код, я хотел рассчитать расстояние с новыми координатами каждые 30 секунд. время импорта импортируйте numpy как np-расстояние(a, b): расстояние = np.sqrt((a[0]-b[0])*(a[0]-b[0]) (a[1]-b[1])*(a[1]-b[1]) (a[2]-b[2])*(a[2] — b[2])) координаты обратного расстояния(): тета = np.linspace(0, 2*np.pi, 1000) радиус = .5 x = радиус * np.sin( тета ) y = радиус * np.cos( тета ) z = 4,2 pos = [] для i в диапазоне (0, 1000): pos = (x[i], y[i], z) возврат pos

4. следующая часть: четкости основной(): цель = НП.массив([3.6528202764153976, -7.055446756786874524, 8.52021764]) ток = координаты() печать(ток) в то время как true: Дис = расстояние(цель,текущие) печать(Дис) время.сон(3) Если имя == » главный «: главный()

5. Это потрясающе! @LazyBumQ Большое тебе спасибо! Я довольно долго боролся за это. Я попытался поднять голос, но не хватило репутации.