A higher definition image on an 80 x 80 board:
Same thing, but on a 96 x 96 board, but with a longer color list:
Now, I think there is a way to find the number of moves for any distance, but it is a bit convoluted. Notice how the board seems to be divided in 8 lines, whose gradients are 2:1 (corresponding to how a Knight moves). Thus you could divide the board into 8 parts, but 4 of these parts (the diagonal and perpendicular segments) are rotationally 4 fold symmetrical. So you would then say, if the gradient is between 22.5 degrees and 67.5 degrees (or when 1/2 < ceiling( y/x ) < 2) then do something, and if the gradient is between 337.5 and 22.5 degrees (or when -1/2 < ceiling( y/x ) < 1/2) , then do something else. The edge cases would have to be studied in more detail.
The number of steps it takes to get to a certain point seems to grow linearly as you go out. Additionally, if you want a mathematical way to express checkered patterns, say you have a square with coordinates x and y, and take the modulus ( a fancy way of saying remainder ) of the sum of the two by 2, every square will have a value of 1 or 0, corresponding to a checker patter. TLDR: The remainder of (x+y) divided by 2 will return either a 1 or a 0 in a checkerboard pattern for all x and y.
I think with those elements you should have a way to mathematically how many moves a Knight is from a certain square. Do tell me if you flesh it out, because my program has been running brute force and it takes a couple of minutes to generate an image like this.
code:
pastebin.com/Vi3NemqgThe color gradient functions I used are taken from this site:
bsou.io/posts/color-gradients-with-pythonA pregenerated list for all the positions the Knight can go to in 44 moves or less:
pastebin.com/tZDizCip