I have used interleaved binary representations to
do this.  The even bits of the scalar come from
the x coordinate of the pair, and the odd bits
come from the y coordinate.

For each direction, you have translation tables
to work on the input numbers a byte at a time, so
it's pretty fast.

Henry Rich

> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of John Randall
> Sent: Wednesday, May 21, 2008 10:05 AM
> To: [email protected]
> Subject: [Jprogramming] Enumerating the plane
> 
> Suppose I want to set up an explicit correspondence between the
> nonnegative integers and the gridded first quadrant (pairs (x,y) where
> x and y are nonnegative integers).
> 
> I can do this by picking a norm on Z^2, and taking successive shells
> swept out in some order.
> 
> If I use the 1-norm |(x,y)|=|x|+|y|, the shells are reverse diagonals:
> 
> NB. yth triangular number
> T=:2&!@>:
> 
> NB. pair->integer
> f=:({: + T@:(+/))"1
> 
> odometer=: #: i.@(*/)
> 
>    |.|: 5 5 $ f odometer 5 5
> 14 19 25 32 40
>  9 13 18 24 31
>  5  8 12 17 23
>  2  4  7 11 16
>  0  1  3  6 10
> 
> To invert this, I have to find the largest triangular number less than
> or equal to y.
> 
> NB. "inverse" of T
> TI=:13 : '<. >./ > {: p. (-y),0.5 0.5'
> 
> NB. integer->pair
> g=:3 : 0"0
> n=.TI y
> b=.y-T n
> a=.n-b
> a,b
> )
> 
> 
> NB. Check that f and g are inverses.
> 
> integers=:1e3 ?. 1e3
> pairs=:_2 ]\ integers
> 
>    (-:[EMAIL PROTECTED]) pairs
> 1
>    (-:[EMAIL PROTECTED]) integers
> 1
> 
> 
> I could use another norm.  Taking the infinity norm  x>./ y, I get
> shells that are quarter-squares, and inversion is easier.  Taking the
> Euclidean norm gives quarter-circles, and enumerating the shell
> involves finding Pythagorean triples.
> 
> Does anyone have any suggestions on this?  In particular are there
> better ways to go for the verb TI?
> 
> Best wishes,
> 
> John
> 
> 
> 
> 
> ----------------------------------------------------------------------
> For information about J forums see 
> http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to