MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Polygon cutter

  • To: mathgroup at smc.vnet.net
  • Subject: [mg88028] Re: Polygon cutter
  • From: carlos at Colorado.EDU
  • Date: Tue, 22 Apr 2008 06:28:20 -0400 (EDT)
  • References: <200804200349.XAA11201@smc.vnet.net> <fuhf9s$ib1$1@smc.vnet.net>

On Apr 21, 12:39 pm, Mark Fisher <particlefil... at gmail.com> wrote:
> On Apr 21, 6:41 am, car... at colorado.edu wrote:
>
>
>
> > On Apr 21, 1:21 am, "W_Craig Carter" <ccar... at mit.edu> wrote:
>
> > > Hello Carlos,
> > > I believe the interpretation of good style is a bit like ethics--it's
> > > easy to agree in extreme cases, but the in-between cases are
> > > subjective.
>
> > > I think this depends on whether you intend to modify the code in the
> > > future. I believe V1 is easier to read, and if you think that someone
> > > else may wish to modify it, then I recommend sticking with that.
> > > However,"Which" will probably be more efficient, and rank the order of=

> > > tests with decreasing frequency.
>
> > > V2 looks cool--some people like that.  There is probably  a way to=

> > > improve the coolness even more, and remove the need to return the
> > > impossible "Null"s.  Creating V2 probably hones your skills and is
> > > more interesting to do, which is similarly important; but probably has=

> > > a direct impact on a broader interpretation of efficiency.
>
> > > On Sat, Apr 19, 2008 at 11:49 PM,  <car... at colorado.edu> wrote:
> > > > A programming style question.  The code fragments below come
> > > >  Version 1. Straight translation from Fortran:
>
> > > >  p={Null};
> > > >  If [tb>0&&tb==tt,  p={P1,P2,P4,P3}];
>
> > > :
> > > :
>
> > > >  poly=Graphics[Polygon[p]];
>
> > > >  Version 2. Table driven variant of above:
>
> > > >  p={{{},{Pc1,Pc2,Pc3},{Pc1,P4,P3},{Pc1,Pc2,P3,P4}},
> > > >    {{Null},{},{Null},{Null}},
> > > >    {{Null},{Pc3,Pc2,P1,P2},{P1,P2,P4,P3},{Pc2,P1,P2,P4,P3}},
> > > >    {{Null},{Pc3,P1,P2},{Null},{P1,P2,P4,P3}}} [[tb+2,tt+2]];
> > > >  poly=Graphics[Polygon[p]];
>
> > > >  Question: which version is preferable in Mathematica, or is
> > > >  there a better one? Both run roughly at the same speed
> > > >  (about 25 microsec under 5.2 on an Intel MacBook Pro).
> > > >  Since this  loop is traversed once for each polygon,
> > > >  efficiency is important.
>
> > > --
> > > W. Craig Carter
>
> > Your suggestion of looking at the Which construct was an interesting
> > one -
> > didn't know it existed. So I tried it as
>
> >   p={Null};
> >   Which [tb>0&&tb==tt,  p={P1,P2,P4,P3}, tb==1&&tt==2,=

> > p={Pc2,P1,P2,P4,P3},
> >              tb==-1&&tt==-1,p={},       =
     tb==-1&&tt==0=
> > ,
> > p={Pc1,Pc2,Pc3},
> >              tb==-1&&tt==1, p={Pc1,P4,P3},   t=
b==-1&&tt==2,
> > p={Pc1,Pc2,P3,P4},
> >              tb==0&&tt==0,  p={},       =
     tb==1&&tt==0,
> > p={Pc3,Pc2,P1,P2},
> >              tb==2&&tt==0,  p={Pc3,P1,P2}];
> >    poly=Graphics[Polygon[p]];
>
> > The two most common cases are the first two.  I expected this to be
> > quicker than V1
> > but it wasnt.  On a MacBook Pro under 5.2:
>
> >             V1          25 microsec/polygon
> >             V2          24
> >             Which     30
>
> > Similar rankings for 4.1 and 4.2. Havent tested it on 6.0.
>
> How about using Switch?
>
> switchfun[{tb_, tt_}]:=
> Switch[{tb, tt},
>  {tb, tb} /; tb > 0, {P1, P2, P4, P3},
>  {1, 2}, {Pc2, P1, P2, P4, P3},
>  {-1, 0}, {Pc1, Pc2, Pc3},
>  {-1, 1}, {Pc1, P4, P3},
>  {-1, 2}, {Pc1, Pc2, P3, P4},
>  {1, 0}, {Pc3, Pc2, P1, P2},
>  {2, 0}, {Pc3, P1, P2},
>  {_, _}, {}
>  ]
>
> Graphics@Polygon@switchfun@{tb,tt}
>
> Note, in V6 Graphics[Polygon[{}]] is OK but Graphics[Polygon[{Null}]]
> produces an error. And the same is true for Graphics3D.
>
> --Mark

{Null} IS intended to trigger an error, since those tag combinations,
in the famous Unix phrase, "cant happen"


  • Prev by Date: Re: need help with Plot
  • Next by Date: RE: Re: Player Pro and Packages
  • Previous by thread: Re: Polygon cutter
  • Next by thread: Re: Polygon cutter