Проблема с корректным содержанием многоугольника, кажется, неправильно помечает все содержащиеся точки - PullRequest
0 голосов
/ 01 февраля 2020

Допустим, у нас есть сетка 100x100, которая содержит многоугольник. Теперь, если мы раскрасим все возможные (x, y) точки [x, y являются целыми числами], которые содержатся в многоугольнике, мы должны ожидать, что многоугольник будет несколько нарисован / заполнен

Но изображение, которое я получаю никогда не попадает должным образом и заполняет многоугольник! Это стройное ограничение или я что-то не так делаю ?! (обратите внимание, мне нужно, чтобы это работало для других целей, а не только для рисования многоугольника)

многоугольник и заполненная область не перекрываются

import numpy as np
import matplotlib.pyplot as plt
import shapely.geometry

points = np.random.randint(0,100, (10,2)) # 10 random points
poly   = shapely.geometry.MultiPoint(points).convex_hull.buffer(1) # a polygon 
grid_points = [ shapely.geometry.Point(x,y) for x in range(100) for y in range(100)]
in_poly = np.array([poly.contains(point) for point in grid_points])

#plot
plt.imshow(in_poly.reshape(100,100), origin='lower')
plt.plot(*poly.exterior.xy)

1 Ответ

0 голосов
/ 01 февраля 2020

Это похоже на то, что вы хотите - замените одну строку (поменяйте местами циклы y и x в):

grid_points = [ shapely.geometry.Point(x,y) for y in range(100) for x in range(100)]

Пара замечаний:

Моя установка У shapely есть имя этого модуля (геометрия пишется иначе, поэтому вам может потребоваться изменить имя в строке выше):

  import shapely.geometry

И спасибо за добавление второй команды plot - это помогло куче.

Что-то на этом пути имеет разные основные порядки (row-vs-column), поэтому приведенная выше строка меняется на major-столбца.

И, возможно, вы захотите компенсировать это, выполнив обратное на внешнем графике.

(оригинал (с новой случайной формой), обновленный, с внешним видом)

enter image description here enter image description here enter image description here

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