[Matplotlib-users] paths optimizer
Al Niessner
Al.Niessner at gmx.net
Thu Nov 12 11:34:56 EST 2015
If I understand them both correctly (will need more time to fully
appreciate what the documentation is telling me) it seems I will need to
use both. I can use shapely to find the intersections in order to form
my new path and then use matplotlib patches to clip the original
polygons. Maybe shapely can clip too but I did not find it in the first
30 seconds that I was looking at the documentation.
Thanks for the help.
On Thu, 2015-11-12 at 08:21 +0000, Ian Thomas wrote:
> Hello Al,
>
> The search terms you are looking for are 'polygon clipping' and
> 'boolean operations on polygons'.
>
>
> Matplotlib can clip one polygon with respect to another, there is a
> simple example at
> http://stackoverflow.com/questions/22612323/clipping-a-triagle-with-a-circle-in-matplotlib
>
>
> Alternatively, for more flexibility use shapely. For example:
>
> from shapely.geometry import Polygon
> a = Polygon([(0, 0), (1.1, 0), (1.1, 1.1), (0, 1.1)])
> b = Polygon([(.9, 0), (2, 0), (2, 1.1), (.9, 1.1)])
> c = Polygon([(.9, .9), (2, .9), (2, 2), (.9, 2)])
>
> d = a.intersection(b).intersection(c)
>
> print(d)
>
> which outputs
>
> POLYGON ((0.9 0.9, 0.9 1.1, 1.1 1.1, 1.1 0.9, 0.9 0.9))
>
> i.e. a rectangle from x = 0.9 to 1.1 and y from 0.9 to 1.1.
>
>
> Ian Thomas
>
>
>
>
> On 12 November 2015 at 03:47, Al Niessner <Al.Niessner at gmx.net> wrote:
>
> I have three paths that each define a bounding box. Lets just
> say I have
> these three in (x,y) coordinates and all are moveto, lineto,
> lineto,
> lineto, and closepoly:
>
> 1: (0, 0), (1.1, 0), (1.1, 1.1), (0, 1.1), (0, 0)
> 2: (.9, 0), (2, 0), (2, 1.1), (.9, 1.1), (.9, 0)
> 3: (.9, .9), (2, .9), (2, 2), (.9, 2) (.9, .9)
>
> While my paths have more nodes and are not as cleanly vertical
> and
> horizontal, it does cover the nature of what I am
> experiencing.
>
> The first thing to note is that each box has overlap at x = 1
> and y = 1
> and all three boxes overlap at (1,1).
>
> What I am looking for is an optimizer that would be smart
> enough to say
> hey, because of the overlap, we can trim the boxes to:
>
> 1: (0,0) (1,0) (1,1) (0,1) (0,0)
> 2: (1,0) (2,0) (2,1), (1,1), (1,0)
> 3: (1,1) (2,1) (2,2), (1,2), (1,1)
>
> I am not sure that optimizer is the right word to use either.
> I have
> poked around matplotlib a bit (over many years) and tried
> searching but
> guessing the search terms is not simple either. Hence, I am
> asking if
> anyone is aware of matplotlib functionality that will help me
> do this
> task. Any other tool outside of matplotlib would be just as
> nice of a
> suggestion. One last bit, it has to work for N paths.
>
> As always, thanks in advance.
>
> --
> Al Niessner
>
> I have never found the companion that was so companionable as
> solitude.
> - From Walden by Henry David Thoreau
>
> The universe is indifferent, and life is brutal; however, it
> is man's
> choice of behavior that makes them malevolent rather than
> benevolent.
>
> Some will fall in love with life and drink it from a fountain
> That is pouring like an avalanche coming down the mountain.
> - From the song Pepper by the Butthole Surfers
>
>
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users at python.org
> https://mail.python.org/mailman/listinfo/matplotlib-users
>
>
--
Al Niessner
I have never found the companion that was so companionable as solitude.
- From Walden by Henry David Thoreau
The universe is indifferent, and life is brutal; however, it is man's
choice of behavior that makes them malevolent rather than benevolent.
Some will fall in love with life and drink it from a fountain
That is pouring like an avalanche coming down the mountain.
- From the song Pepper by the Butthole Surfers
More information about the Matplotlib-users
mailing list