Генерация заполненного многоугольника в массиве NumPy, - PullRequest
0 голосов
/ 18 февраля 2019

Мне нужно создать пустой массив, который будет указывать на заполненный многоугольник с 1 и снаружи 0.Прежде чем сказать, это дубликат вопроса.Я уже проверил много других вопросов и ответов.наконец получил этот для работы с одним из моих дел.но при изменении 4 вершин эта функция не работает.Я пытался изменить многие вещи в нем, и, кажется, ничего не работает, и я просто не могу понять, в чем разница и почему это не работает.

Сначала я работал с

c = [[47, 187], [55, 47], [184, 186], [186, 46]]

вВ первом случае у меня были некоторые ошибки в начале.порядок точек имеет значение.после добавления следующих кодов все работало нормально.здесь x и y - это половина от lenX и lenY.

t = []
    for i in range(4):
        for j in c:
            if j[0]<x and j[1]<y:
                t.append(j)
                c.pop(c.index(j))
                break
        for j in c:
            if j[0]<x and j[1]>y:
                t.append(j)
                c.pop(c.index(j))
                break
        for j in c:
            if j[0]>x and j[1]>y:
                t.append(j)
                c.pop(c.index(j))
                break
        for j in c:
            t.append(j)
            c.pop(c.index(j))
            break
    c= np.array(t)

, называемая такой функцией, где lenX и lenY всегда около 200, а точки находятся в пределахrange.

pol = create_polygon([lenX,lenY],c)

во втором случае мои вершины

c = [[96, 208],[97, 91], [221, 206], [221, 85]]

, теперь это не работает, и я не знаю почему.пожалуйста, посмотрите, можете ли вы найти то, что я пропустил.

1 Ответ

0 голосов
/ 19 февраля 2019

обновили ли вы функцию в соответствии со вторым ответом на вопрос, который вы связали?в первом ответе есть проблема

исходная функция может работать с вашим первым набором координат, но второй набор данных выдает предупреждение о делении на ноль, соответственно измените функцию проверки следующим образом, и она должна работать длявсе координаты

def check(p1, p2, base_array):
 idxs =
np.indices(base_array.shape)

 p1= p1.astype(float)
 p2= p2.astype(float)

 if p1[0] == p2[0]:
   max_col_idx = (idxs[0] - p1[0] * idxs.shape[1]
   sign = np.sign(p2[1] - p1[1])
 else:
   max_col_idx = (idxs[0] - p1[0]) / (p2[0] - p1[0]) * (p2[1]-p1[1]) + p1[1]
   sign = np.sign(p2[0] - p1[0])
 return idxs[1] * sign <= max_col_idx * sign
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...