<p>上面提出的解决方案不起作用,因为它是针对单个不重叠的小四边形。当我们使用两个重叠的四边形时(对您的示例稍作修改):</p>
<pre><code>import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(6, 6))
xi, yi = np.array([(-0.2, -0.2), (-0.2, 0.2), (0.2, 0.2), (0.2, -0.2), (-0.2, -0.2)]).T
xo, yo = np.array([(-1, 1.), (-1, -1.), (1, -1.), (1., 1.), (-1, 1.)]).T
plt.fill(list(xo)+list(xi)+list(xi+0.1), list(yo)+list(yi)+list(yi+0.1), facecolor='green', zorder=5)
plt.fill(list(xo+.3)+list(xi+.3), list(yo+.3)+list(yi+.3), facecolor='red', zorder=4)
plt.show()
</code></pre>
<p>结果如<a href="https://i.stack.imgur.com/HkOnW.gif" rel="nofollow noreferrer">in this snapshot</a>所示</p>
<p>此外,即使在使用单个不重叠的小正方形的示例中,如果该正方形不完全“在”较大的多边形内,也会出现如下所示的渲染问题:</p>
<pre><code>mport numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(6, 6))
xi, yi = np.array([(-0.2, -0.2), (-0.2, 0.2), (0.2, 0.2), (0.2, -0.2), (-0.2, -0.2)]).T
#xo, yo = np.array([(-1, 1.), (-1, -1.), (1, -1.), (1., 1.), (-1, 1.)]).T
xo, yo = np.array([(-.1, .1), (-1, -1.), (1, -1.), (1., 1.), (-.1, .1)]).T
#plt.fill(list(xo)+list(xi)+list(xi+0.1), list(yo)+list(yi)+list(yi+0.1), facecolor='green', zorder=5)
plt.fill(list(xo)+list(xi), list(yo)+list(yi), facecolor='green', zorder=5)
plt.fill(list(xo+.3)+list(xi+.3), list(yo+.3)+list(yi+.3), facecolor='red', zorder=4)
plt.show()
</code></pre>
<p>这是结果:<a href="https://i.stack.imgur.com/wukgj.gif" rel="nofollow noreferrer">Bad rendering when little square is partially outside</a></p>
<p>也许使用Shapely union可以解决第一个问题,即重叠的小四边形,但是我们如何解决小四边形部分位于外部的问题呢?
请告诉我什么对这个案子最好。你知道吗</p>