6
$\begingroup$

Inspired by a Project Euler problem, I recently started playing around with Ulam spirals. My first thought was that an Ulam spiral could be a (rather useless) coordinate system, and how I might be able to convert from "Ulam coordinates" (i.e. just the number on the spiral at a given point) to rectangular coordinates and vice versa.

So the question is: Is there a single function that would return the number on the Ulam spiral given (x,y)? And also (and perhaps more of a challenge), one to convert back?

I'm just a sophomore computer science student, and not terribly competent in math compared to the people on these site, sadly (I'm in Calc III right now). I was able to work out four separate equations to find the number on the spiral given an ordered pair, but that's one for each of four sections in between the 'diagonal axes' (I'm not sure what to call them). Unfortunately, I have yet to make this more simple. Any ideas?

$\endgroup$
3
  • 1
    $\begingroup$ As you observed, it is easy to find formulae (given by polynomials of degree $2$) for the four "half-lines" given by $\vert x\vert=\vert y\vert$. One gets then formulae for the general case according to the quarter plane determined by $\vert x\vert=\vert y\vert$ containing a given point. I think that this is the simplest solution. By the way, I agree with your first thought. $\endgroup$ Commented Jun 22, 2010 at 5:41
  • $\begingroup$ Great question. I'm interested in this because it provides a nice spatial hashing algorithm. For example convert (x,y) to ulam, and then insert into hash table using ulam as key. $\endgroup$ Commented Oct 29, 2015 at 3:29
  • $\begingroup$ I wasn't able to find an answer to this, so I rolled my own. It's not a 'single' formula but rather 4 or 5 separate formulae. I wanted it write the UIam Spiral as a shader, which inherently means you're given the cartesian coordinates and need to decide what to do from there. shadertoy.com/view/ssjBRm $\endgroup$ Commented Feb 26, 2022 at 23:21

1 Answer 1

3
$\begingroup$

A while ago, Dan Pearcy approached me with a similar problem, asking for the inverse formula to convert $n$ into coordinates $(x,y)$. Using the floor function, it was not too difficult to provide an explicit closed form. He wrote a blog post about this, including my extremely messy closed form:

https://web.archive.org/web/20141202041502/https://danpearcymaths.wordpress.com/2012/09/30/infinity-programming-in-geogebra-and-failing-miserably/

$\endgroup$
0

Not the answer you're looking for? Browse other questions tagged .