[Date Index]
[Thread Index]
[Author Index]
Re: Intersection of polygons and more
*To*: mathgroup at smc.vnet.net
*Subject*: [mg30403] Re: Intersection of polygons and more
*From*: "Alan Mason" <amason2 at austin.rr.com>
*Date*: Wed, 15 Aug 2001 01:04:10 -0400 (EDT)
*References*: <9lal4i$cc6$1@smc.vnet.net>
*Sender*: owner-wri-mathgroup at wolfram.com
Hello.
Either those aren't polygons, or I'm ready to give up mathematics and enter
a convent.
Anyhow, I have an n-dimensional Voronoi code that treats some related
problems. By keeping a list of the (affine, hyper) planes that determine
the faces of the polyhedron (or a polygon in 2D), one can find the
intersection of two such polyhedra as the set of points for which all the
planes in both lists evaluate to <= 0. The built-in function LinearSolve[]
is useful for converting from "canonical" form (lists of planes) to
"standard" form ({set of vectors spanning the intersection}, Pt}, where Pt
lies in the intersection). The faces of the intersection can be found
combinatorially from the plane lists. It's a good exercise in linear
algebra.
Alan
<WizardPaul at aol.com> wrote in message news:9lal4i$cc6$1 at smc.vnet.net...
> I'm trying to devise a fast way to intersect polygons. For example, if I
> have:
>
> poly1 = Table[{0.6 + Cos[2 + Cos[t]]*Sin[t/3], Sin[t/3]*Sin[2 + Cos[t]] -
> 0.2}, {t, Pi/2, (5/2)*Pi, 0.2}]
>
> poly2 = Table[{0.8 Cos[t], 0.8 Sin[t]}, {t, 4, 4 + 2Pi, 0.2}]
>
> What's the fastest way to get something like this?:
>
> {{0.391927, 0.254649}, {0.472822, 0.341857}, {0.57571, 0.410207},
> {0.664196, 0.445919}, {0.603122, 0.525589}, {0.486681, 0.634934},
> {0.350838, 0.718966}, {0.288021, 0.746354}, {0.131601, 0.683303},
> {-0.0301305, 0.571709}, {-0.156521, 0.43601}, {-0.242242, 0.293184},
> {-0.289192, 0.160103}, {-0.304406, 0.0503182}, {-0.296871, -0.0275226},
> {-0.274492, -0.0697097}, {-0.242073, -0.0766683},
{-0.200641, -0.0520995},
> {-0.148065, -0.00248934}, {-0.0806987, 0.0631007}, {0.00436518,
0.133429},
> {0.107061, 0.196173}, {0.222934, 0.239917}, {0.343236, 0.256572}}
>
> Notice the addition of points {0.288021, 0.746354} and {0.664196,
0.445919}.
>
>
> Since they are very closely related functions, how about for subtraction:
>
> {{0.664196, 0.445919}, {0.57571, 0.410207}, {0.472822, 0.341857},
> {0.391927, 0.254649}, {0.343236, 0.256572}, {0.222934, 0.239917},
> {0.107061, 0.196173}, {0.00436518, 0.133429}, {-0.0806987, 0.0631007},
> {-0.148065, -0.00248934}, {-0.200641, -0.0520995},
> {-0.242073, -0.0766683}, {-0.274492, -0.0697097},
{-0.296871, -0.0275226},
> {-0.304406, 0.0503182}, {-0.289192, 0.160103}, {-0.242242, 0.293184},
> {-0.156521, 0.43601}, {-0.0301305, 0.571709}, {0.131601, 0.683303},
> {0.288021, 0.746354}, {0.201008, 0.774336}, {0.0431643, 0.798835},
> {-0.1164, 0.791487}, {-0.271324, 0.752584}, {-0.415431, 0.683679},
> {-0.542976, 0.587518}, {-0.648874, 0.467934}, {-0.728904, 0.329695},
> {-0.779875, 0.178312}, {-0.799754, 0.0198203}, {-0.78775, -0.139461},
> {-0.744341, -0.293183}, {-0.671257, -0.435217}, {-0.571413, -0.5599},
> {-0.522915, -0.605442}, {-0.392209, -0.697261}, {-0.245866, -0.761282},
> {-0.089722, -0.794953}, {0.0699992, -0.796932}, {0.22693, -0.767139},
> {0.374813, -0.706764}, {0.507754, -0.618212}, {0.620453, -0.505013},
> {0.708416, -0.371682}, {0.768136, -0.223532}, {0.797234, -0.0664715},
> {0.794548, 0.0932394}, {0.760186, 0.249233}, {0.695518, 0.395291}}
>
> and addition (union):
>
> {{0.664196, 0.445919}, {0.689398, 0.456023}, {0.801922, 0.481245},
> {0.902855, 0.492509}, {0.984458, 0.499028}, {1.0415, 0.510113},
> {1.07021, 0.532997}, {1.06716, 0.571203}, {1.02882, 0.623506},
> {0.952175, 0.683546}, {0.836368, 0.74035}, {0.68479, 0.780088},
> {0.506533, 0.789118}, {0.316201, 0.757722}, {0.288021, 0.746354},
> {0.201008, 0.774336}, {0.0431643, 0.798835}, {-0.1164, 0.791487},
> {-0.271324, 0.752584}, {-0.415431, 0.683679}, {-0.542976, 0.587518},
> {-0.648874, 0.467934}, {-0.728904, 0.329695}, {-0.779875, 0.178312},
> {-0.799754, 0.0198203}, {-0.78775, -0.139461}, {-0.744341, -0.293183},
> {-0.671257, -0.435217}, {-0.571413, -0.5599}, {-0.522915, -0.605442},
> {-0.392209, -0.697261}, {-0.245866, -0.761282}, {-0.089722, -0.794953},
> {0.0699992, -0.796932}, {0.22693, -0.767139}, {0.374813, -0.706764},
> {0.507754, -0.618212}, {0.620453, -0.505013}, {0.708416, -0.371682},
> {0.768136, -0.223532}, {0.797234, -0.0664715}, {0.794548, 0.0932394},
> {0.760186, 0.249233}, {0.695518, 0.395291}}
>
> Again with the additional points {0.288021, 0.746354} and {0.664196,
> 0.445919}.
>
> Exclusion would also be useful.
>
> Those two added points in each case are simply "eyeballed" points of
> intersection.
>
> Lastly, is it possible to do similar (boolean) operations on
parametrically
> described shapes?
>
> Thanks,
>
> Paul
>
Prev by Date:
**Re: Rotation3D, MatrixRotation3D ?**
Next by Date:
**RE: Rotation3D, MatrixRotation3D ?**
Previous by thread:
**Intersection of polygons and more**
Next by thread:
**Date calculating software?**
| |