Задать вопрос
@dmitrie

Как сгенерировать промежуточные координаты?

Мне нужно сгенерировать промежуточные координаты из списка по типу эмуляции движения мышкой, с рандомным шагом.
Координаты могут быть как на увеличение так и на убывание.
Допустим имеем список координат в таком виде:
[[392,556], [95,309], [207,192]]

На выходе нужно получить вложеный список:
Типа такого

[
	[392,556,1732631473015],
	[375,557,1732631473038],
	[370,558,1732631473054],
	[365,558,1732631473070],
	[361,558,1732631473086],
	[357,558,1732631473102],
	[352,558,1732631473118],
	[349,558,1732631473134],
	[348,558,1732631473150],
	[346,558,1732631473190],
	[344,558,1732631473262],
	[343,558,1732631474263],
	[341,558,1732631475062],
	[340,557,1732631475094],
	[336,554,1732631475110],
	[329,548,1732631475126],
	[313,535,1732631475142],
	[297,520,1732631475158],
	[283,507,1732631475174],
	[273,500,1732631475190],
	[267,494,1732631475206],
	[263,489,1732631475222],
	[258,486,1732631475238],
	[254,483,1732631475254],
	[249,478,1732631475270],
	[245,474,1732631475286],
	[241,470,1732631475302],
	[235,462,1732631475318],
	[231,457,1732631475334],
	[230,457,1732631475350],
	[230,456,1732631475382],
	[229,455,1732631475398],
	[228,454,1732631475422],
	[224,451,1732631475438],
	[222,449,1732631475454],
	[220,448,1732631475470],
	[219,446,1732631475486],
	[215,444,1732631475502],
	[212,441,1732631475518],
	[210,440,1732631475534],
	[208,438,1732631475558],
	[206,437,1732631475862],
	[203,435,1732631475878],
	[202,434,1732631475910],
	[201,433,1732631475942],
	[199,432,1732631475958],
	[196,430,1732631475974],
	[191,426,1732631475990],
	[186,418,1732631476006],
	[180,410,1732631476022],
	[174,402,1732631476038],
	[167,394,1732631476054],
	[157,383,1732631476071],
	[138,360,1732631476096],
	[129,352,1732631476113],
	[120,344,1732631476134],
	[117,341,1732631476150],
	[115,339,1732631476166],
	[113,335,1732631476182],
	[112,334,1732631476198],
	[110,331,1732631476215],
	[105,328,1732631476231],
	[97,323,1732631476254],
	[94,321,1732631476278],
	[94,320,1732631476454],
	[94,315,1732631476471],
	[95,309,1732631476494],
	[99,299,1732631476510],
	[105,290,1732631476526],
	[112,279,1732631476542],
	[120,270,1732631476558],
	[125,262,1732631476574],
	[132,253,1732631476590],
	[138,245,1732631476606],
	[144,237,1732631476622],
	[149,231,1732631476638],
	[154,227,1732631476654],
	[158,224,1732631476670],
	[165,219,1732631476686],
	[179,209,1732631476702],
	[190,200,1732631476718],
	[199,189,1732631476734],
	[202,185,1732631476750],
	[203,183,1732631476782],
	[207,192,1732631477158]
]


где третьим значением время (в js new Date().getTime())

Может есть какая-нить библиотека готовая?
Или подскажите как реализовать чтоб не городить кучу циклов
  • Вопрос задан
  • 409 просмотров
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
@dim5x
ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
1. Случайные координаты: steps - шаги между контрольными точками.
2. Случайное время исполнения: time_movie - время перемещения в секундах.

import time
from numpy.random import randint, default_rng

def f(coords: list, time_movie: int, steps: int) -> list:
    x_a, y_a = [], []
    now = int(time.time() * 1000)
    rng = default_rng()
    timestamp = sorted(rng.integers(now, now + time_movie * 1000, size=(steps * len(coords) - 1) + 1))

    for i in range(len(coords) - 1):
        x1, y1, x2, y2 = coords[i] + coords[i + 1]
        x_a += [x1] + sorted(randint(min(x1, x2), max(x1, x2), size=steps), reverse=1 if x1 > x2 else 0) + [x2]
        y_a += [y1] + sorted(randint(min(y1, y2), max(y1, y2), size=steps), reverse=1 if x1 > x2 else 0) + [y2]

    return [[x, y, t] for x, y, t in zip(x_a, y_a, timestamp)]

coords = [[392, 556], [95, 309], [207, 192]]
print(f(coords=coords, time_movie=2, steps=30))
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
GavriKos
@GavriKos
Это реализуется обычным lerp-ом, погуглите (ну или гпт озадчьте). Там пара строк всего.
Ответ написан
Комментировать
Maksim_64
@Maksim_64
Data Analyst
import time
l = [[392,556], [95,309], [207,192]]
result = [item + [int(time.time() * 1000)] for item in l]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
14 дек. 2024, в 07:35
500 руб./за проект
14 дек. 2024, в 05:57
50000 руб./за проект
14 дек. 2024, в 02:49
500 руб./за проект