MathGroup Archive 1998

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

Search the Archive

Re: ciphers and programming style

  • To: mathgroup at smc.vnet.net
  • Subject: [mg13349] Re: [mg13274] ciphers and programming style
  • From: Carl Woll <carlw at fermi.phys.washington.edu>
  • Date: Mon, 20 Jul 1998 02:50:04 -0400
  • Sender: owner-wri-mathgroup at wolfram.com

Hi Tom,

One simple thing you could do is to use := instead of = in your
definitions of the letters, e.g.,

f:=Graphics[{Circle[{0,0},1], 
 			Line[{pts[[3]], pts[[5]]}],
 		Line[{pts[[4]], pts[[2]]}]},AspectRatio->Automatic];

Now, when you change rotate pts, f will use the latest value of pts. You
may want to turn this into a function.

f[pts_] := Graphics[{Circle[{0,0},1], 
 			Line[{pts[[3]], pts[[5]]}],
 		Line[{pts[[4]], pts[[2]]}]},AspectRatio->Automatic];

Then, if you rotate your original pts with

rpts=Transpose[{{0,1},{-1,0}}.Transpose[pts]]

and try 

f[rpts]

you should get a graphic of the rotated f.

Carl Woll
Dept of Physics
U of Washington

On Fri, 17 Jul 1998, Tom wrote:

> Hello Mathematica users.  
> 
> I recently worked on a simple set of definitions to produce a cipher.  A
> cipher uses pictures to represent the letters of the alphabet.  This
> cipher was used in one of the books about "The Shadow".  Once the basic
> pictures were created, in order to disguise the code, they could be
> rotated by 90 degrees or 180 degrees, and so on.  This would provide
> practice in the application of transformations to geometric figures, a
> topic in high school geometry.  I would give the basic cipher, then
> give the students a code to decipher where all the letters in the basic
> cipher were rotated by 90 degrees or 180 degrees or something like
> that.
> 
> I managed to get this all to work, but I learned some things that I
> didn't know before, and I wondered if someone could help me "clean up"
> my efforts somewhat?
> 
> All the letters in the cipher are based on circles with various lines
> from the center of the circle to points on the circle.  For example,
> here is what the letter "k" looks like.
> 
> 
> k=Graphics[{Circle[{0,0},1], Line[{{0,1},{0,0},{1,0}}]}, 
>     AspectRatio->Automatic];
> 
> 
> Show[k];
> 
> I wanted to be able to put all the letters into a graphics array at the
> end, so that is why I used AspectRatio->Automatic
> 
> Since I would be using the same points on the circle for all the letters
> (in various forms) and I also thought it would make it easier to rotate
> the letter forms, I created a list of points.  Here is part of the
> list.
> 
> 
> pts={{0,0},{1,0},{0,1},{-1,0},{0,-1}};
> 
> So now, I can create letters based on these points.  Below are my
> definitions of f,g,k and l
> 
> 
> f=Graphics[{Circle[{0,0},1], 
> 			Line[{pts[[3]], pts[[5]]}],
> 		Line[{pts[[4]], pts[[2]]}]},AspectRatio->Automatic];
> 
> 
> g=Graphics[{Circle[{0,0},1], 
> 			Line[{pts[[3]], pts[[5]]}]},AspectRatio->Automatic];
> 
> 
> k=Graphics[{Circle[{0,0},1], 
> 			Line[{pts[[3]],pts[[1]], pts[[2]] }]},AspectRatio->Automatic];
> 
> l=Graphics[{Circle[{0,0},1], 
> 			Line[{pts[[3]],pts[[1]], pts[[4]] }]},AspectRatio->Automatic];
> 
> 
> Show[GraphicsArray[{f,g,k,l}]];
> 
> So far, so good.....  
> 
> I then found I could rotate all my "letters" 90 degrees by rotating my
> list of points by 90 degrees.  I used the rotation matrix
> {{0,1},{-1,0}} Here is my original list of points again
> 
> pts={{0,0},{1,0},{0,1},{-1,0},{0,-1}};
> 
> Using dot product.....
> 
> pts=Transpose[{{0,1},{-1,0}}.Transpose[pts]]
> 
> {{0,0},{0,-1},{1,0},{0,1},{-1,0}}
> 
> So I did get a list of points, rotated through 90 degrees.  (Clockwise) 
> Here is where things got messy.  
> 
> First of all, I realized I now messed up my original list of points. 
> And secondly, I found, to my astonishment, that Mathematica still used
> the OLD VALUE of pts when drawing the letters.  I probably read this
> somewhere and "knew" it but I had not experienced it before.
> 
> 
> Show[GraphicsArray[{f,g,k,l}]];
> 
> The letters are not rotated.  So, I needed to redefine the letters and
> then redraw them.  SO I redefined the letters and then
> 
> 
> Show[GraphicsArray[{f,g,k,l}]];
> 
> There they are.....  After I redefined the definitions of f,g,k and l. 
> Things work fine.  The question is, how might I have done this more
> elegantly?  Not having any programming background I would appreciate
> any pointers on how I might have implemeted this more nicely. Thanks
> for any assistance you might provide.
> 
> Sincerely,
> 
> Tom
> 



  • Prev by Date: PDF (not the format, the function).
  • Next by Date: Re: new user help
  • Previous by thread: ciphers and programming style
  • Next by thread: Comparison of Mathematica on Various Computers