问题:
matplotlib.path中函数 contains_point 中的 radius 参数定义不一致。此函数检查指定点是否位于闭合路径的内部或外部。半径参数用于使路径变小/变大(取决于半径的符号)。这样,可以将靠近路径的点纳入考虑/不考虑。问题是,半径的符号取决于路径的方向(顺时针或逆时针)。(在我看来)不一致是存在的,因为在检查点是在路径内部还是外部时,路径的方向被忽略。从严格的数学意义上来说:路径上剩下的所有东西都包括在内。
简而言之:
如果路径逆时针方向,则正半径会考虑更多点。如果路径是顺时针方向,则正半径会考虑较少的点。
例子:
在以下示例中,检查了 3 种情况 - 每种情况都针对顺时针和逆时针路径:
代码:
import matplotlib.path as path
import numpy as np
verts=np.array([[-11.5, 16. ],[-11.5, -16. ],[ 11.5, -16. ],[ 11.5, 16. ],[-11.5, 16. ]])
ccwPath=path.Path(verts, closed=True)
cwPath=path.Path(verts[::-1,:], closed=True)
testPoint=[12,0]
print('contains: ','|\t', '[12,0], radius=3','|\t', '[12,0], radius=-3','|\t', '[0,0]|')
print('counterclockwise: ','|\t'
,'{0:>16s}'.format(str(ccwPath.contains_point(testPoint,radius=3) )),'|\t'
,'{0:>17s}'.format(str(ccwPath.contains_point(testPoint,radius=-3) )),'|\t'
,ccwPath.contains_point([0,0],radius=0) ,'|\t'
,'=> radius increases tolerance \t'
)
print('clockwise: ','|\t'
,'{0:>16s}'.format(str(cwPath.contains_point(testPoint,radius=3) )),'|\t'
,'{0:>17s}'.format(str(cwPath.contains_point(testPoint,radius=-3) )),'|\t'
,cwPath.contains_point([0,0],radius=0) ,'|\t'
,'=> radius decreases tolerance …Run Code Online (Sandbox Code Playgroud)