f=lambda r,x=0:r-x and-~((r*r-x*x)**.5%1>0)*4+f(r,x+1)
Pruébalo en línea!
Menos golf (55 bytes) ( TIO )
lambda r:8*r-4*sum((r*r-x*x)**.5%1==0for x in range(r))
Esto estima la salida como 8*r, luego corrige los cruces de vértices. El resultado es 8*r-g(r*r), donde g(x)cuenta el número de formas de escribir xcomo una suma de dos cuadrados (excepto g(0)=0).
Si el círculo nunca atravesara ningún vértice, el número de celdas tocadas sería igual al número de bordes cruzados. El círculo pasa a través de 2*rlíneas verticales y 2*rhorizontales, pasando cada una en ambas direcciones, para un total de 8*r.
Pero, cada cruce en un vértice cuenta como dos cruces de borde mientras solo ingresa a una nueva celda. Entonces, compensamos restando el número de cruces de vértices. Esto incluye los puntos en ejes (r,0)como así como triples pitagóricos como (4,3)para r=5.
Contamos para un solo cuadrante los puntos (x,y)con x>=0y y>0con x*x+y*y==n, luego multiplicamos por 4. Hacemos esto contando los sqrt(r*r-x*x)números que son números enteros xen el intervalo [0,r).