| 105 |
|
case VDB_xY: return(db2==VDB_x ? VDB_y : VDB_X); |
| 106 |
|
case VDB_Xy: return(db2==VDB_y ? VDB_x : VDB_Y); |
| 107 |
|
} |
| 108 |
< |
error(INTERNAL, "forbidden diagonal in vdb_edge()"); |
| 108 |
> |
error(CONSISTENCY, "forbidden diagonal in vdb_edge()"); |
| 109 |
|
return(-1); |
| 110 |
|
} |
| 111 |
|
|
| 537 |
|
|
| 538 |
|
|
| 539 |
|
/* Compute anisotropic radii and eigenvector directions */ |
| 540 |
< |
static int |
| 540 |
> |
static void |
| 541 |
|
eigenvectors(FVECT uv[2], float ra[2], FVECT hessian[3]) |
| 542 |
|
{ |
| 543 |
|
double hess2[2][2]; |
| 559 |
|
if (i == 1) /* double-root (circle) */ |
| 560 |
|
evalue[1] = evalue[0]; |
| 561 |
|
if (!i || ((evalue[0] = fabs(evalue[0])) <= FTINY*FTINY) | |
| 562 |
< |
((evalue[1] = fabs(evalue[1])) <= FTINY*FTINY) ) |
| 563 |
< |
error(INTERNAL, "bad eigenvalue calculation"); |
| 564 |
< |
|
| 562 |
> |
((evalue[1] = fabs(evalue[1])) <= FTINY*FTINY) ) { |
| 563 |
> |
ra[0] = ra[1] = maxarad; |
| 564 |
> |
return; |
| 565 |
> |
} |
| 566 |
|
if (evalue[0] > evalue[1]) { |
| 567 |
|
ra[0] = sqrt(sqrt(4.0/evalue[0])); |
| 568 |
|
ra[1] = sqrt(sqrt(4.0/evalue[1])); |
| 729 |
|
double avg_d = 0; |
| 730 |
|
uint32 flgs = 0; |
| 731 |
|
int i, j; |
| 732 |
< |
/* check distances above us */ |
| 732 |
> |
/* don't bother for a few samples */ |
| 733 |
> |
if (hp->ns < 12) |
| 734 |
> |
return(0); |
| 735 |
> |
/* check distances overhead */ |
| 736 |
|
for (i = hp->ns*3/4; i-- > hp->ns>>2; ) |
| 737 |
|
for (j = hp->ns*3/4; j-- > hp->ns>>2; ) |
| 738 |
|
avg_d += ambsam(hp,i,j).d; |
| 739 |
|
avg_d *= 4.0/(hp->ns*hp->ns); |
| 740 |
< |
if (avg_d >= max_d) /* too close to corral? */ |
| 740 |
> |
if (avg_d*r0 >= 1.0) /* ceiling too low for corral? */ |
| 741 |
|
return(0); |
| 742 |
+ |
if (avg_d >= max_d) /* insurance */ |
| 743 |
+ |
return(0); |
| 744 |
|
/* else circle around perimeter */ |
| 745 |
|
for (i = 0; i < hp->ns; i++) |
| 746 |
|
for (j = 0; j < hp->ns; j += !i|(i==hp->ns-1) ? 1 : hp->ns-1) { |
| 829 |
|
K = 1.0; |
| 830 |
|
pg = NULL; |
| 831 |
|
dg = NULL; |
| 832 |
+ |
crlp = NULL; |
| 833 |
|
} |
| 834 |
|
ap = hp->sa; /* relative Y channel from here on... */ |
| 835 |
|
for (i = hp->ns*hp->ns; i--; ap++) |
| 865 |
|
if (ra[0] > maxarad) |
| 866 |
|
ra[0] = maxarad; |
| 867 |
|
} |
| 868 |
< |
if (crlp != NULL) /* flag encroached directions */ |
| 868 |
> |
/* flag encroached directions */ |
| 869 |
> |
if ((wt >= 0.5-FTINY) & (crlp != NULL)) |
| 870 |
|
*crlp = ambcorral(hp, uv, ra[0]*ambacc, ra[1]*ambacc); |
| 871 |
|
if (pg != NULL) { /* cap gradient if necessary */ |
| 872 |
|
d = pg[0]*pg[0]*ra[0]*ra[0] + pg[1]*pg[1]*ra[1]*ra[1]; |