diff --git a/julia.c b/julia.c index 4dcf007..692b16d 100644 --- a/julia.c +++ b/julia.c @@ -134,7 +134,7 @@ julia_main(int argc, char *argv[]) int palette_size = 720, width = 640, height = 400, - i, j; + rescache_width, rescache_height, i, j; int ch, do_light = 0; while ((ch = getopt(argc, argv, OPTSTRING)) != -1) @@ -191,7 +191,11 @@ julia_main(int argc, char *argv[]) palette = palette_gen(palette_size); - if ((rescache = malloc(sizeof(*rescache) * width * height)) == NULL) + rescache_width = width + (do_light ? 1 : 0); + rescache_height = height + (do_light ? 1 : 0); + + if ((rescache = malloc(sizeof(*rescache) * rescache_width + * rescache_height)) == NULL) errx(1, "out of memory"); if (do_light) { @@ -220,22 +224,22 @@ julia_main(int argc, char *argv[]) print_critical_points(); sec_w /= zoom; sec_h /= zoom; - for (i = 0; i < height; i++) { + for (i = 0; i < rescache_height; i++) { zy = cen_y + (0.5L - i / (long double)height) * sec_h; - for (j = 0; j < width; j++) { + for (j = 0; j < rescache_width; j++) { zx = cen_x + (j / (long double)width - 0.5L) * sec_w; z = zx + I * zy; it = iterate(z, julia, &rit); - rescache[i * width + j].it = it; - rescache[i * width + j].rit = rit; + rescache[i * rescache_width + j].it = it; + rescache[i * rescache_width + j].rit = rit; } } - pnmout_header(stdout, width - 1, height - 1); - for (i = 0; i < height - 1; i++) { - for (j = 0; j < width - 1; j++) { - it = rescache[i * width + j].it; - rit = rescache[i * width + j].rit; + pnmout_header(stdout, width, height); + for (i = 0; i < height; i++) { + for (j = 0; j < width; j++) { + it = rescache[i * rescache_width + j].it; + rit = rescache[i * rescache_width + j].rit; if (it < 0) color = contour_color; @@ -243,10 +247,10 @@ julia_main(int argc, char *argv[]) ritnum = (it - rit) * density; if (do_light) { long double lxrn, lyrn, l, lx, ly, lz; - lxrn = rescache[i * width + j + 1].it - - rescache[i * width + j + 1].rit; - lyrn = rescache[(i + 1) * width + j].it - - rescache[(i + 1) * width + j].rit; + lxrn = rescache[i * rescache_width + j + 1].it + - rescache[i * rescache_width + j + 1].rit; + lyrn = rescache[(i + 1) * rescache_width + j].it + - rescache[(i + 1) * rescache_width + j].rit; lx = -sec_h * (lxrn - it + rit); ly = sec_w * (lyrn - it + rit); lz = sec_w * sec_h;