/* pov_hf_synth.c ============== Thierry Boudet */ #include #include #include #include "../tthimage.h" /*::------------------------------------------------------------------::*/ /* new 6 Jan 2002, pas fini le 6 Jan 2003. */ int Image_hf15_synth_0(Image_Desc *dst, Image_PtList *ptl) { int foo, nb, idx; int x, y, dist, distmin; int ptx, pty, xx, yy; fprintf(stderr, "%s:%d (%s) img %p ptl %p\n", __FILE__, __LINE__, __func__, dst, ptl); if (ptl->control != 0xfde9601a) { fprintf(stderr, "%p is not a ptlist\n", ptl); return -1; } nb = ptl->nbre; printf("%s : il y a %d points dans la liste %p\n", __func__, nb, ptl); for (y=0; yheight; y++) { for (x=0; xwidth; x++) { idx = -9999; distmin = 99999999; for (foo=0; foopoints[foo].x; pty = ptl->points[foo].y; xx = x - ptx; yy = y - pty; dist = (xx*xx) + (yy*yy); if (dist < distmin) { distmin = dist; idx = foo; } } /* got a value */ Image_hf15_plot(dst, x, y, ptl->points[idx].h); } } return FULL_NUCKED; } /* * pourtant, il me semble qu'il existe un code Fortran qui * commence à bien fonctionner ? */ /*::------------------------------------------------------------------::*/ /* * remise en chantier de ce truc le 31 janvier 2008 - */ static int plot_synth_1(Image_Desc *img, int x, int y, double dh) { int ih; ih = (int)(dh); #if DEBUG_LEVEL > 1 printf(" (%d,%d) -> %g -> %d\n", x, y, dh, ih); #endif Image_hf15_plot(img, x, y, ih); #define COEF 0.777 ih = (int)(dh*COEF); Image_hf15_plot(img, x-1, y , ih); Image_hf15_plot(img, x+1, y , ih); Image_hf15_plot(img, x , y-1, ih); Image_hf15_plot(img, x , y+1, ih); ih = (int)(dh*COEF); Image_hf15_plot(img, x-1, y-1, ih); Image_hf15_plot(img, x-1, y+1, ih); Image_hf15_plot(img, x+1, y-1, ih); Image_hf15_plot(img, x+1, y+1, ih); ih = (int)(dh*COEF); Image_hf15_plot(img, x-2, y , ih); Image_hf15_plot(img, x+2, y , ih); Image_hf15_plot(img, x , y-2, ih); Image_hf15_plot(img, x , y+2, ih); return 1; } /* ++++++++++++++++++++++++++++++++++++ */ int Image_hf15_synth_1(Image_Desc *dst, Image_PtList *ptl) { int idx, nb; double dbl_h; printf("**** %s:%s: %p %p\n", __FILE__, __func__, dst, ptl); if (ptl->control != 0xfde9601a) { fprintf(stderr, "%s: %p is not a ptlist\n", __func__, ptl); return -1; } nb = ptl->nbre; printf("%s : il y a %d points dans la liste %p\n", __func__, nb, ptl); for (idx=0; idx 1 printf("point #%d\n", idx); #endif dbl_h = (double)ptl->points[idx].h; plot_synth_1(dst, ptl->points[idx].x, ptl->points[idx].y, dbl_h); } return FULL_NUCKED; } /*::------------------------------------------------------------------::*/ /* new 11 decembre 2007 - ave St Exupery */ int Image_hf15_synth_fromfunc0(Image_Desc *dst, int param, double(*func)(int x, int y, int k)) { int x, y; double dx, dy, val; double minh, maxh, delta; long surface; double *array, *ptr; double a, b; printf("%s: %p %d\n", __func__, dst, param); surface = (long)dst->height * (long)dst->width; printf(" surface image: %ld pixels\n", surface); array = malloc(sizeof(double)*surface); if (NULL == array) { fprintf(stderr, "no mem at %s:%s:%d\n", __FILE__, __func__, __LINE__); abort(); } minh = 9e99; maxh = -9e99; ptr = array; for (x=0; xwidth; x++) { dx = (double)x; for (y=0; yheight; y++) { dy = (double)y; val = func(x, y, 51); *ptr++ = val; if (val < minh) minh = val; if (val > maxh) maxh = val; } } delta = maxh - minh; printf("extremums: %.12g %.12g\n", minh, maxh); printf("delta: %.12g\n", delta); a = 32766.9999 / delta; b = - ( a * minh ); printf(" a & b: %.12g %.12g\n", a, b); minh = 9e99; maxh = -9e99; ptr = array; for (x=0; xwidth; x++) { for (y=0; yheight; y++) { val = *ptr++; val = (a * val) + b; if (val < minh) minh = val; if (val > maxh) maxh = val; Image_hf15_plot(dst, x, y, ceil(val)); } } printf("altitudes: %.12g %.12g\n", minh, maxh); free(array); return FUNC_IS_BETA; } /*::------------------------------------------------------------------::*/