int roiComputeElli(ROI *roi) { int i, ix, iy, /*ox,*/ oy, n, s, w, h; w=roi->w; h=roi->h; if((roi->x=malloc(sizeof(int)))==NULL) return(-1); if((roi->y=malloc(sizeof(int)))==NULL) {free((char*)roi->x); return(-1);} roi->x[0]=0; roi->y[0]=h; n=1; oy=h; for(ix=1; ix<w; ix++) { iy=(jsqrt(h+h*h*(w-ix)*(w+ix)))/w; if(oy-iy>1) break; if((roi->x=(int*)realloc((char*)roi->x, (n+1)*sizeof(int)))==NULL) return -1; if((roi->y=(int*)realloc((char*)roi->y, (n+1)*sizeof(int)))==NULL) { free((char*)roi->x); free((char*)roi->y); return -1;} roi->x[n]=ix; roi->y[n++]=iy; oy=iy; } /*ox=ix;*/ for(iy=oy-1; iy>=0; iy--) { ix=(jsqrt(w+w*w*(h-iy)*(h+iy)))/h; if((roi->x=(int*)realloc((char*)roi->x, (n+1)*sizeof(int)))==NULL) return -1; if((roi->y=(int*)realloc((char*)roi->y, (n+1)*sizeof(int)))==NULL) { free((char*)roi->x); free((char*)roi->y); return -1;} roi->x[n]=ix; roi->y[n++]=iy; /*ox=ix;*/ } for(i=n-1, s=i; i>0; i--) { if((roi->x=(int*)realloc((char*)roi->x, (n+1)*sizeof(int)))==NULL) return -1; if((roi->y=(int*)realloc((char*)roi->y, (n+1)*sizeof(int)))==NULL) { free((char*)roi->x); free((char*)roi->y); return -1;} roi->x[n]=roi->x[--s]; roi->y[n++]=-roi->y[s]; } for(i=n-1, s=i; i>0; i--) { if((roi->x=(int*)realloc((char*)roi->x, (n+1)*sizeof(int)))==NULL) return -1; if((roi->y=(int*)realloc((char*)roi->y, (n+1)*sizeof(int)))==NULL) { free((char*)roi->x); free((char*)roi->y); return -1;} roi->x[n]=-roi->x[--s]; roi->y[n++]=roi->y[s]; } roi->point_nr=n; return(0); }
JNIEXPORT jdouble JNICALL Java_java_lang_StrictMath_sqrt(JNIEnv *env, jclass unused, jdouble d) { return (jdouble) jsqrt((double)d); }