|
From: algotr8der <alg...@gm...> - 2013-05-09 19:55:45
|
I tried to execute the following code: http://matplotlib.org/faq/howto_faq.html#test-whether-a-point-is-inside-a-polygon However I get errors I describe here: http://stackoverflow.com/questions/16452509/matplotlib-pnpoly-example-results-in-error >>>import numpy as np >>>import matplotlib.nxutils as nx >>>verts = np.array([ [0,0], [0, 1], [1, 1], [1,0]], float) >>>nx.pnpoly(0.5, 0.5, verts) Traceback (most recent call last): File "<console>", line 1, in <module> File "C:\Python27\lib\site-packages\matplotlib\nxutils.py", line 26, in pnpoly return p.contains_point(x, y) File "C:\Python27\lib\site-packages\matplotlib\path.py", line 289, in contains_point transform = transform.frozen() AttributeError: 'float' object has no attribute 'frozen' >>>nx.pnpoly(0.5, 1.5, verts) Traceback (most recent call last): File "<console>", line 1, in <module> File "C:\Python27\lib\site-packages\matplotlib\nxutils.py", line 26, in pnpoly return p.contains_point(x, y) File "C:\Python27\lib\site-packages\matplotlib\path.py", line 289, in contains_point transform = transform.frozen() AttributeError: 'float' object has no attribute 'frozen' Apparently, nxutils is deprecated, which to me means it should still work but a user on stackoverflow pointed out that there may be some code rot. That said, the documentation on matplotlib.path.Path.contains_point is weak (see below). Does anyone have an example of how I can do the exact same thing in the code in the howto_faq but using the suggested function (contains_point)? http://matplotlib.org/1.2.1/api/path_api.html?highlight=contains_point#matplotlib.path.Path.contains_point contains_point(point, transform=None, radius=0.0) Returns True if the path contains the given point. If transform is not None, the path will be transformed before performing the test. radius allows the path to be made slightly larger or smaller. contains_points(points, transform=None, radius=0.0) Returns a bool array which is True if the path contains the corresponding point. If transform is not None, the path will be transformed before performing the test. radius allows the path to be made slightly larger or smaller. -- View this message in context: http://matplotlib.1069221.n5.nabble.com/re-matplotlib-pnpoly-example-results-in-error-tp41028.html Sent from the matplotlib - users mailing list archive at Nabble.com. |
|
From: Nicolas R. <Nic...@in...> - 2013-05-10 07:23:54
|
From the matplotlib page, you can reach: http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html and just translates the function: def inside_polygon(p, vertices): vx,vy = vertices[:,0], vertices[:,1] x,y = p c = 0 j = len(vertices)-1 for i in xrange(len(vertices)): if( ((vy[i] > y) != (vy[j] > y)) and (x < (vx[j]-vx[i]) * (y-vy[i]) / (vy[j]-vy[i]) + vx[i]) ): c = 1-c j = i return c Of course this would be slower than the corresponding C implementation. Nicolas On May 9, 2013, at 21:55 , algotr8der wrote: > I tried to execute the following code: > > http://matplotlib.org/faq/howto_faq.html#test-whether-a-point-is-inside-a-polygon > > However I get errors I describe here: > > http://stackoverflow.com/questions/16452509/matplotlib-pnpoly-example-results-in-error > >>>> import numpy as np >>>> import matplotlib.nxutils as nx >>>> verts = np.array([ [0,0], [0, 1], [1, 1], [1,0]], float) >>>> nx.pnpoly(0.5, 0.5, verts) > > Traceback (most recent call last): > File "<console>", line 1, in <module> > File "C:\Python27\lib\site-packages\matplotlib\nxutils.py", line 26, in > pnpoly > return p.contains_point(x, y) > File "C:\Python27\lib\site-packages\matplotlib\path.py", line 289, in > contains_point > transform = transform.frozen() > AttributeError: 'float' object has no attribute 'frozen' > >>>> nx.pnpoly(0.5, 1.5, verts) > > Traceback (most recent call last): > File "<console>", line 1, in <module> > File "C:\Python27\lib\site-packages\matplotlib\nxutils.py", line 26, in > pnpoly > return p.contains_point(x, y) > File "C:\Python27\lib\site-packages\matplotlib\path.py", line 289, in > contains_point > transform = transform.frozen() > AttributeError: 'float' object has no attribute 'frozen' > > Apparently, nxutils is deprecated, which to me means it should still work > but a user on stackoverflow pointed out that there may be some code rot. > That said, the documentation on matplotlib.path.Path.contains_point is weak > (see below). Does anyone have an example of how I can do the exact same > thing in the code in the howto_faq but using the suggested function > (contains_point)? > > http://matplotlib.org/1.2.1/api/path_api.html?highlight=contains_point#matplotlib.path.Path.contains_point > > contains_point(point, transform=None, radius=0.0) > > Returns True if the path contains the given point. > If transform is not None, the path will be transformed before performing > the test. > radius allows the path to be made slightly larger or smaller. > > contains_points(points, transform=None, radius=0.0) > > Returns a bool array which is True if the path contains the > corresponding point. > If transform is not None, the path will be transformed before performing > the test. > radius allows the path to be made slightly larger or smaller. > > > > > > > -- > View this message in context: http://matplotlib.1069221.n5.nabble.com/re-matplotlib-pnpoly-example-results-in-error-tp41028.html > Sent from the matplotlib - users mailing list archive at Nabble.com. > > ------------------------------------------------------------------------------ > Learn Graph Databases - Download FREE O'Reilly Book > "Graph Databases" is the definitive new guide to graph databases and > their applications. This 200-page book is written by three acclaimed > leaders in the field. The early access version is available now. > Download your free book today! http://p.sf.net/sfu/neotech_d2d_may > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users |
|
From: Cameron H. <cam...@gm...> - 2013-05-12 07:31:22
|
On 2013-05-09, at 3:55 PM, algotr8der <alg...@gm...> wrote: > Apparently, nxutils is deprecated, which to me means it should still work > but a user on stackoverflow pointed out that there may be some code rot. > That said, the documentation on matplotlib.path.Path.contains_point is weak > (see below). Does anyone have an example of how I can do the exact same > thing in the code in the howto_faq but using the suggested function > (contains_point)? from matplotlib.path import Path path = Path(polygonVerts) isInside = path.contains_point(point) -- Cameron Hayne cam...@gm... |