-
-static int calc_walk(struct vec2x *path, long x, long y, int max_steps)
-{
- int i;
- long cx, cy;
-
- /* convert to fixed point roughly [-1, 1] */
- x = cx = (normalize_coord(x, fb_width) >> 8) * xscale_24x8;
- y = cy = (normalize_coord(y, fb_height) >> 8) * yscale_24x8;
-
- for(i=0; i<max_steps; i++) {
- /* z_n = z_{n-1}**2 + c */
- long px = x >> 8;
- long py = y >> 8;
-
- path[i].x = device_coord((x << 8) / xscale_24x8, fb_width);
- path[i].y = device_coord((y << 8) / yscale_24x8, fb_height);
-
- if(px * px + py * py > (4 << 16)) {
- break;
- }
- x = px * px - py * py + cx;
- y = (px * py << 1) + cy;
- }
-
- return i;
-}