/* pickshell: pick a random point on a sphere of specified radius. */ static inline mwvector pickShell(dsfmt_t* dsfmtState, real rad) { real rsq, rsc; mwvector vec; do /* pick point in NDIM-space */ { vec = mwRandomUnitPoint(dsfmtState); rsq = mw_sqrv(vec); /* compute radius squared */ } while (rsq > 1.0); /* reject if outside sphere */ rsc = rad / mw_sqrt(rsq); /* compute scaling factor */ mw_incmulvs(vec, rsc); /* rescale to radius given */ return vec; }
mwvector mwRandomVector(dsfmt_t* dsfmtState, real r) { mwvector v = mwRandomUnitVector(dsfmtState); mw_incmulvs(v, r); return v; }
mwvector mwRandomPoint(dsfmt_t* dsfmtState, real s) { mwvector v = mwRandomUnitPoint(dsfmtState); mw_incmulvs(v, s); return v; }