Is there a routine in matplotlib for telling whether a point is inside a convex 4 sided polygon?

Mathew

Is there a routine in matplotlib for telling whether a point is inside a convex 4 sided polygon?

Mathew

If you can convert your polygon to a path, you can use the "contains_point" method:

>>> from matplotlib import path

>>> p = path.Path([[0,0], [42, 3], [45, 23], [1, 32]])

>>> p.contains_point([5,5])

1

>>> p.contains_point([72, 3])

0

Mike

Mathew Yeates wrote:

Is there a routine in matplotlib for telling whether a point is inside a convex 4 sided polygon?

Mathew

-------------------------------------------------------------------------

This SF.Net email is sponsored by the Moblin Your Move Developer's challenge

Build the coolest Linux based applications with Moblin SDK & win great prizes

Grand prize is a trip for two to an Open Source event anywhere in the world

http://moblin-contest.org/redirect.php?banner_id=100&url=/

_______________________________________________

Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/matplotlib-users

--

Michael Droettboom

Science Software Branch

Operations and Engineering Division

Space Telescope Science Institute

Operated by AURA for NASA

Mathew,

Have you tried the solution that was suggested by Angus yesterday on the numpy

mailing list ?

http://projects.scipy.org/pipermail/scipy-user/2008-February/015418.html

import numpy as np

import matplotlib.nxutils as nxutils

polygon=np.array([(0,0),(0,1),(1,1),(1,0)])

points = np.array([(0.5,0.5),(0.4,1.5)])

nxutils.points_inside_poly(points, polygon)

array([1, 0], dtype=int32)

Meaning that the first point is, the second is not.

Thanks! Thats exactly what I was looking for!

Mathew

Michael Droettboom wrote:

If you can convert your polygon to a path, you can use the "contains_point" method:

>>> from matplotlib import path

>>> p = path.Path([[0,0], [42, 3], [45, 23], [1, 32]])

>>> p.contains_point([5,5])

1

>>> p.contains_point([72, 3])

0Mike

Mathew Yeates wrote:

Is there a routine in matplotlib for telling whether a point is inside a convex 4 sided polygon?

Mathew

-------------------------------------------------------------------------

This SF.Net email is sponsored by the Moblin Your Move Developer's challenge

Build the coolest Linux based applications with Moblin SDK & win great prizes

Grand prize is a trip for two to an Open Source event anywhere in the world

http://moblin-contest.org/redirect.php?banner_id=100&url=/

_______________________________________________

Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Angus originally suggest matplotlib. The other proposed solutions are overkill, unless it turns out that performance is a problem

Thanks

Mathew

Pierre GM wrote:

Mathew,

Have you tried the solution that was suggested by Angus yesterday on the numpy mailing list ?http://projects.scipy.org/pipermail/scipy-user/2008-February/015418.html

import numpy as np

import matplotlib.nxutils as nxutils

polygon=np.array([(0,0),(0,1),(1,1),(1,0)])

points = np.array([(0.5,0.5),(0.4,1.5)])

nxutils.points_inside_poly(points, polygon)

array([1, 0], dtype=int32)

Meaning that the first point is, the second is not.

-------------------------------------------------------------------------

This SF.Net email is sponsored by the Moblin Your Move Developer's challenge

Build the coolest Linux based applications with Moblin SDK & win great prizes

Grand prize is a trip for two to an Open Source event anywhere in the world

http://moblin-contest.org/redirect.php?banner_id=100&url=/

_______________________________________________

Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Pierre GM wrote:

Mathew,

Have you tried the solution that was suggested by Angus yesterday on the numpy mailing list ?http://projects.scipy.org/pipermail/scipy-user/2008-February/015418.html

import numpy as np

import matplotlib.nxutils as nxutils

polygon=np.array([(0,0),(0,1),(1,1),(1,0)])

points = np.array([(0.5,0.5),(0.4,1.5)])

nxutils.points_inside_poly(points, polygon)array([1, 0], dtype=int32)

Meaning that the first point is, the second is not.

It seems to me that the output should be boolean, so the line

mask = (PyArrayObject *)PyArray_SimpleNew(1,dimensions,PyArray_INT);

in nxutils.cpp would become

mask = (PyArrayObject *)PyArray_SimpleNew(1,dimensions, NPY_BOOL);

Can anyone think of anything this would break, or any disadvantages?

Eric

This looks better to me too - -I suggest testing it with the lasso

demo which was the example that motivated this code.

JDH

On Tue, Oct 14, 2008 at 2:58 PM, Eric Firing <efiring@...202...> wrote:

mask = (PyArrayObject *)PyArray_SimpleNew(1,dimensions,PyArray_INT);

in nxutils.cpp would become

mask = (PyArrayObject *)PyArray_SimpleNew(1,dimensions, NPY_BOOL);

Can anyone think of anything this would break, or any disadvantages?

John Hunter wrote:

On Tue, Oct 14, 2008 at 2:58 PM, Eric Firing <efiring@...202...> wrote:

mask = (PyArrayObject *)PyArray_SimpleNew(1,dimensions,PyArray_INT);

in nxutils.cpp would become

mask = (PyArrayObject *)PyArray_SimpleNew(1,dimensions, NPY_BOOL);

Can anyone think of anything this would break, or any disadvantages?

This looks better to me too - -I suggest testing it with the lasso

demo which was the example that motivated this code.JDH

It worked, so I went ahead and committed the change. I had to change one other line, and while in the neighborhood I replaced the other old-form PyArray_* with NPY_*.

Eric