How can I convert coordinates on a circle to coordinates on a square?

Jonathan Gawrych picture Jonathan Gawrych · Nov 3, 2012 · Viewed 9.1k times · Source

I'm currently working on a game in LBP2 that has modify the way a controller gives input. This question: How can I convert coordinates on a square to coordinates on a circle? Has helped me quite a lot with what I am doing, but I do have one problem. I need the inverse function of the one they give. They go from square -> circle, and I've tried searching all over for how to map a circle to a square.

The function given in the previous question is:

xCircle = xSquare * sqrt(1 - 0.5*ySquare^2)

yCircle = ySquare * sqrt(1 - 0.5*xSquare^2)

From Mapping a Square to a Circle

My question is given xCircle and yCircle... how do I find xSquare and ySquare?

I've tried all of the algebra I know, filled up two pages of notes, tried to get wolfram alpha to get the inverse functions, but this problem is beyond my abilities.

Thank you for taking a look.

Answer

Ch Fong picture Ch Fong · Sep 4, 2015

x = ½ √( 2 + u² - v² + 2u√2 ) - ½ √( 2 + u² - v² - 2u√2 )
y = ½ √( 2 - u² + v² + 2v√2 ) - ½ √( 2 - u² + v² - 2v√2 )

Note on notation: I'm using x = xSquare , y = ySquare, u = xCircle and v = yCircle;

i.e. (u,v) are circular disc coordinates and (x,y) are square coordinates.

grid mapping

For a C++ implementation of the equations, go to
http://squircular.blogspot.com/2015/09/mapping-circle-to-square.html

See http://squircular.blogspot.com for more example images.
Also, see http://arxiv.org/abs/1509.06344 for the proof/derivation

This mapping is the inverse of

u = x √( 1 - ½ y² )
v = y √( 1 - ½ x² )


P.S. The mapping is not unique. There are other mappings out there. The picture below illustrates the non-uniqueness of the mapping.

Boston Celtics squared