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