From: Benjamin R. <ben...@ou...> - 2012-02-13 21:17:18
|
On Mon, Feb 13, 2012 at 2:59 PM, Jerzy Karczmarczuk < jer...@un...> wrote: > > reckoner: > > >> >> >>> th= array([ 4.65542641, 5.32920696, 2.20928291]) >> >>> p=patch.Polygon(array([cos(th),sin(th)]).T) >> >>> print p.contains_point((0,0)) >> 1 >> >>> print matplotlib.nxutils.pnpoly(0,0,p.get_path().vertices) >> 0 >> >> Thanks! >> >> >> > I can confirm this for both the current development branch and v1.1.x. > Strange.... > > Ben Root > > HYPOTHESIS (I have no time to check now everything..., I did my best.) > > If radius=None, it is converted into radius=1 in contains_point (in Patch). > (This is the linewidth !) > I am not sure whether it is ok, i.e. in pixels. If this value is > considered to be relative to axes, it is enormous! > > p.contains_point((0,0),radius=0.01) > > gives 0 as it should. > > Jerzy Karczmarczuk > > P.S. I suggest anyway that reckoner submits a complete program with > imports. What is "patch"?? > > > Jerzy is right. contains() and contains_point() both takes a radius argument as this function is intended for use when mouse-clicking. If no radius is given, it uses the object's linewidth and passes it to the path's contains_point() function with its transform. I *suspect* that the problem is that the transforms haven't been fully defined yet and might be incorrectly testing this. This needs a bit more investigation to see if this is the intended behavior or if something needs to be fixed. As a side note, "patch" is an imported module via "from matplotlib import patches as patch". Not standard among mpl devs, but not out of the ordinary. Ben Root |