matplotlib中包含路径的路径

2024-04-19 07:55:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图评估一个圆是否包含在另一个形状中(在这个简单的例子中,我将使用一个正方形)。你知道吗

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\u path时才是这样,但这是我唯一可以使用的方法包含.path在圆对象上。你知道吗

关于如何检查一个圆是否包含在另一个形状中有什么想法?你知道吗


Tags: pathfromimportaddgetmatplotlibasfig
1条回答
网友
1楼 · 发布于 2024-04-19 07:55:52

圆的路径is always a unit circle

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))

radius=3的情况下打印False,在radius<2的情况下打印True

相关问题 更多 >