相关疑难解决方法(0)

matplotlib.Path.contains_points:“半径”参数定义不一致

问题:

matplotlib.path中函数 contains_point 中的 radius 参数定义不一致。此函数检查指定点是否位于闭合路径的内部或外部。半径参数用于使路径变小/变大(取决于半径的符号)。这样,可以将靠近路径的点纳入考虑/不考虑。问题是,半径的符号取决于路径的方向(顺时针或逆时针)。(在我看来)不一致是存在的,因为在检查点是在路径内部还是外部时,路径的方向被忽略从严格的数学意义上来说:路径上剩下的所有东西都包括在内。

简而言之:

如果路径逆时针方向,则正半径会考虑更多点。如果路径是顺时针方向,则正半径会考虑较少的点。

例子:

在以下示例中,检查了 3 种情况 - 每种情况都针对顺时针和逆时针路径:

  1. 是一个包含正半径的点(靠近路径)
  2. 是一个包含负半径的点(靠近路径)
  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)

python contains point path matplotlib

4
推荐指数
1
解决办法
2151
查看次数

标签 统计

contains ×1

matplotlib ×1

path ×1

point ×1

python ×1