Как добавить случайные точки между заданными точками? - PullRequest
1 голос
/ 17 января 2020

У меня есть точки данных в качестве кадра данных, как показано на рисунке1

пример данных

df= 
74  34  
74.5    34.5    
75  34.5    
75  34  
74.5    34  
74  34.5    
76  34  
76  34.5    
74.5    34  
74  34.5    
75.5    34.5    
75.5    34  
75  34  
75  34.5    

Я хочу добавить случайные точки между этими точками, но сохранить форму начальных точек. Желаемый результат будет примерно таким же, как на рисунке 2 (черные точки представляют случайные точки. А красная линия представляет границу)

~ Есть предложения? Я ищу общее решение, поскольку геометрия внешней границы в задаче изменится

Figure1_input

Figure2_Desired_output

Ответы [ 2 ]

0 голосов
/ 17 января 2020

интерполяция может стоить изучить:

import numpy as np

# lets suppose y = 2x and x[i], y[i] is a data point
x = [1, 5, 16, 20, 60] 
y = [2, 10, 32, 40, 120]

interp_here = [7, 8, 9, 21] # the points where we are going to interpolate values.

print(np.interp(interp_here, x, y))  ## [14. 16. 18. 42.]

Если вы хотите, чтобы случайные точки, то вы могли использовать вышеупомянутые в качестве ориентира, а затем для каждой точки добавить / вычесть некоторую дельту.

0 голосов
/ 17 января 2020

Если форма выпуклая, это довольно просто:

def get_random_point(points):
    point_selectors = np.random.randint(0, len(points), 2)
    scale = np.random.rand()#value between 0 and 1
    start_point = points[point_selectors[0]]
    end_point = points[point_selectors[1]]
    return start_point + (end_point - start_point) * scale

Указанная вами форма не является выпуклой. Но без того, чтобы вы дополнительно указывали, какие точки составляют внешнюю часть вашей фигуры, или дополнительные ограничения, например, вы хотите, чтобы линии go были параллельны либо оси x, либо y, форма, которую вы видите, математически не указана в достаточной степени.

Последнее замечание: существуют алгоритмы, которые могут проверять, находится ли точка внутри многоугольника ( Точка в многоугольнике ). Затем вы можете 1) указать ограничивающий многоугольник 2) сгенерировать точку в ограничивающем прямоугольнике вашей фигуры и 3) проверить, находится ли точка внутри фигуры вашего многоугольника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...