Was about to go to bed, but this tickled my imagination, so I will say a little something.

Rather than calculus, I would do this as an implicit curve.

Start off with the signed distance function of a circle:

sdc=. ]: -~ +/&.:*:

Then that of a box, taken from https://iquilezles.org/articles/distfunctions2d/:

sdb=. (+/&.:*:@:(0&>.) + 0 <. >./)@:(]: -~ |)

Both of these are adverbs, taking a radius as an operand and then a vector coordinate as an argument. (The latter can also be given a vector, in which case it calculates the distance to an n-dimensional rectangle, but that is irrelevant here.)

Then, we are looking for the case when the distance to the box is equal to the distance to the circle. Such points will be inside the square, but outside the circle, so the distance functions of those shapes will have opposite sign, and we can just add them together:

sdsquircle=. 1 sdc + 1 sdb

sdsquircle is not, strictly speaking, a signed distance function. However, like a signed distance function, it has a value of 0 when applied to a coordinate on the squircle; and it is negative inside, and positive outside. So it is trivial to render the shape from it.

I can expand further on this tomorrow, but I really must be getting to bed now.

 -E

On Mon, 15 Aug 2022, Richard Donovan wrote:

Hi

I want to construct and plot a Squircle in J.

There is a lengthy article in Wikipedia but in simple language I want my 
Squircle to be defined as the continuous line between a unit circle and the 
unit square that encloses it such that every point on the Squircle is the mean 
of the nearest points of the circle and the square.

Thus, the mean is zero at the four points where the circle and the square touch, 
and a maximum of (-: @ <:  @ %:2)  at the four corners of the square.

Each intermediate point between 0 degrees and 90 degrees will be somewhere in 
the middle.

I suspect the calculation of the intermediate points is a calculus function?

Has anyone a good idea for performing that calculation? Could the J function “ 
plot “ then draw the Squircle?

Thanks

Richard Donovan
----------------------------------------------------------------------
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