| 205 |
|
VCOPY(rbf->invec, invec); |
| 206 |
|
} |
| 207 |
|
|
| 208 |
– |
/* Compute volume associated with Gaussian lobe */ |
| 209 |
– |
double |
| 210 |
– |
rbf_volume(const RBFVAL *rbfp) |
| 211 |
– |
{ |
| 212 |
– |
double rad = R2ANG(rbfp->crad); |
| 213 |
– |
|
| 214 |
– |
return((2.*M_PI) * rbfp->peak * rad*rad); |
| 215 |
– |
} |
| 216 |
– |
|
| 208 |
|
/* Compute outgoing vector from grid position */ |
| 209 |
|
void |
| 210 |
|
ovec_from_pos(FVECT vec, int xpos, int ypos) |
| 234 |
|
pos[1] = (int)(sq[1]*grid_res); |
| 235 |
|
} |
| 236 |
|
|
| 237 |
+ |
/* Compute volume associated with Gaussian lobe */ |
| 238 |
+ |
double |
| 239 |
+ |
rbf_volume(const RBFVAL *rbfp) |
| 240 |
+ |
{ |
| 241 |
+ |
double rad = R2ANG(rbfp->crad); |
| 242 |
+ |
FVECT odir; |
| 243 |
+ |
double elev, integ; |
| 244 |
+ |
/* infinite integral approximation */ |
| 245 |
+ |
integ = (2.*M_PI) * rbfp->peak * rad*rad; |
| 246 |
+ |
/* check if we're near horizon */ |
| 247 |
+ |
ovec_from_pos(odir, rbfp->gx, rbfp->gy); |
| 248 |
+ |
elev = output_orient*odir[2]; |
| 249 |
+ |
/* apply cut-off correction if > 1% */ |
| 250 |
+ |
if (elev < 2.8*rad) { |
| 251 |
+ |
/* elev = asin(elev); /* this is so crude, anyway... */ |
| 252 |
+ |
integ *= 1. - .5*exp(-.5*elev*elev/(rad*rad)); |
| 253 |
+ |
} |
| 254 |
+ |
return(integ); |
| 255 |
+ |
} |
| 256 |
+ |
|
| 257 |
|
/* Evaluate RBF for DSF at the given normalized outgoing direction */ |
| 258 |
|
double |
| 259 |
|
eval_rbfrep(const RBFNODE *rp, const FVECT outvec) |
| 264 |
|
FVECT odir; |
| 265 |
|
double sig2; |
| 266 |
|
int n; |
| 267 |
+ |
/* check for wrong side */ |
| 268 |
+ |
if (outvec[2] > 0 ^ output_orient > 0) |
| 269 |
+ |
return(.0); |
| 270 |
|
/* use minimum if no information avail. */ |
| 271 |
< |
if (rp == NULL) { |
| 258 |
< |
if (outvec[2] > 0 ^ output_orient > 0) |
| 259 |
< |
return(.0); |
| 271 |
> |
if (rp == NULL) |
| 272 |
|
return(minval); |
| 273 |
< |
} |
| 273 |
> |
/* sum radial basis function */ |
| 274 |
|
rbfp = rp->rbfa; |
| 275 |
|
for (n = rp->nrbf; n--; rbfp++) { |
| 276 |
|
ovec_from_pos(odir, rbfp->gx, rbfp->gy); |