double solve(double left, double right){ while(xy(left, right)){ double mid = DMID(left, right); double midmid = DMID(mid, right); double mid_area = cal(mid); double midmid_area = cal(midmid); if (xyd(mid_area, midmid_area)) //下凸函数,上凸函数用dyd(mid_area, midmid_area) right = midmid; else left = mid; } return left; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimWellPathGeometryDef::setReferencePointXyz(const cvf::Vec3d& refPointXyz) { cvf::Vec3d xyd(refPointXyz); xyd.z() = -xyd.z(); m_referencePointUtmXyd = xyd; }
__declspec(dllexport) void invmad(int m, double xp[], int kp, int *kxx, double p[], int n, int incr) { /* calculate kx preimage p node */ /* node type mapping m level */ double mne, d1, dd, x, dr, del, convers; double r, d, u[10], y[10]; int i, k, kx, nexp; void xyd(double *, int, double *, int); kx = 0; kp--; for (nexp = 1, i = 0; i<n; i++) { nexp *= 2; u[i] = -1.0; } dr = nexp; for (mne = 1, r = 0.5, i = 0; i<m; i++) { mne *= dr; r *= 0.5; } dr = mne / nexp; dr=dr-fmod(dr,1.0); //dr = (dr>0) ? floor(dr) : ceil(dr); del = 1. / (mne - dr); d1 = del*(incr + 0.5); for (kx = -1; kx<kp;) { for (i = 0; i<n; i++) { /* label 2 */ d = p[i]; y[i] = d - r*u[i]; } for (i = 0; (i<n) && (fabs(y[i]) < 0.5); i++); if (i >= n) { xyd(&x, m, y, n); dr = x*mne; dd=dr-fmod(dr,1.0); //dd = (dr>0) ? floor(dr) : ceil(dr); dr = dd / nexp; dd=dd-dr+fmod(dr,1.0); //dd = dd - ((dr>0) ? floor(dr) : ceil(dr)); x = dd*del; if (kx>kp) break; k = kx++; /* label 9 */ if (kx == 0) xp[0] = x; else { while (k >= 0) { dr = fabs(x - xp[k]); /* label 11 */ if (dr <= d1) { for (kx--; k<kx; k++, xp[k] = xp[k + 1]); goto m6; } else if (x <= xp[k]) { xp[k + 1] = xp[k]; k--; } else break; } xp[k + 1] = x; } } m6: for (i = n - 1; (i >= 0) && (u[i] = (u[i] <= 0.0) ? 1 : -1)<0; i--); if (i<0) break; } *kxx = ++kx; }