re: Plotting a polygon
- To: mathgroup at yoda.physics.unc.edu
- Subject: re: Plotting a polygon
- From: tgayley (Todd Gayley)
- Date: Tue, 15 Dec 1992 16:17:20 -0600
Oslo Kolemainen <koleh%joyl.dnet at joyx.joensuu.fi> asks: >Hi Mathgroup ! > >What is the problem here? My student tried to plot a polygon in a >complicated way. > >Mathematica 2.0 for MS-DOS 386/7 >Copyright 1988-91 Wolfram Research, Inc. > >In[1]:= t=Table[Random[],{5},{2}]; > >This works: > >In[2]:= Show[Graphics[Map[Line,Partition[AppendTo[t,First[t]],2,1]]]] > >Out[2]= -Graphics- > >But when he uses a function polygon[], it does not work. > >In[3]:= polygon[t_]:= > Show[Graphics[Map[Line,Partition[AppendTo[t,First[t]],2,1]]]] > >In[4]:= polygon[t] > >AppendTo::rvalue: > {{0.10459, 0.840989}, {0.177361, 0.503785}, <<3>>, {0.10459, 0.840989}} > has not been assigned a value. > >AppendTo::argr: AppendTo called with 1 argument; 2 arguments are expected. > >AppendTo::argr: AppendTo called with 1 argument; 2 arguments are expected. > >Graphics::gprim: > Unknown Graphics primitive AppendTo[Line[AppendTo[<<2>>]]] encountered. > >Out[4]= -Graphics- > >In[5]:= ?polygon >Global`polygon > >polygon[t_] := Show[Graphics[Line /@ Partition[AppendTo[t, First[t]], 2, 1]]] > >Osmo Kolemainen >University of Joensuu >Finland The problem here is that the AppendTo assigns back into the variable t. This means that t must have an lvalue. But t is a dummy variable that gets replaced with its value (a list) before any evaluation takes place. You can't say AppendTo[{1,2,3},4] any more than you can say {1,2,3} = Append[{1,2,3},4] In short, you can't assign into a dummy variable. The general way to fix this type of problem is to make the code into a Module with a local variable that is assigned the value of t initially: polygon[t_]:= Module[{x=t}, Show[Graphics[Map[Line,Partition[AppendTo[x,First[x]],2,1]]]] ] In the present case, there is an easier fix. There is no need to use AppendTo here -- Append works just as well. This situation is like using += when you really only want +. polygon[t_]:= Show[Graphics[Map[Line,Partition[Append[t,First[t]],2,1]]]] --------------------- Todd Gayley WRI Technical Support