Путь, содержащий путь в matplotlib - PullRequest
0 голосов
/ 13 июня 2018

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

import matplotlib.pyplot as plt
from matplotlib.patches import Circle
from matplotlib import path
import matplotlib.patches as patches

c = Circle((0, 0), radius=3)
path_c = c.get_path()
p = path.Path([(-2, -2), (-2, 2), (2, 2), (2, -2), (-2, -2)])

fig = plt.figure()
ax = fig.add_subplot(111)
patch = patches.PathPatch(p, facecolor='orange', lw=2)
patch2 = patches.PathPatch(path_c, facecolor='blue', lw=2)
ax.add_patch(patch)
ax.add_patch(patch2)
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
plt.show()

print(p.contains_path(path_c))

Проблема, с которой я столкнулся, заключается в том, что независимо от того, что я ввожув круг, это всегда делает круг в начале координат с радиусом 1. Это только в том случае, когда я использую get_path, но это единственный способ, который я могу использовать, с помощью метода Вектор.path для объекта круга.

Любые мысли о том, какЯ могу проверить, содержится ли круг внутри другой фигуры?

1 Ответ

0 голосов
/ 13 июня 2018

Путь к кругу - это всегда единичный круг

self._path = Path.unit_circle()

Здесь вы хотите узнать путь к кругу после того, как он был добавлен к осям, так что онможет получить несколько единиц.

Итак, сначала нам нужно добавить круг к осям

c = Circle((0, 0), radius=3)
ax.add_patch(c)

Затем мы можем получить преобразованный путь (который преобразуется в соответствии с заданным радиусом и центром)и проверьте, содержится ли этот преобразованный путь в другом пути.

c_path = c.get_patch_transform().transform_path(c.get_path())
print(p.contains_path(c_path))

Он печатает False в случае radius=3 и True в случае radius<2

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