| 1 | greg | 2.4 | { RCSid $Id: rambpos.cal,v 2.3 2014/04/25 22:56:06 greg Exp $ } | 
| 2 | greg | 2.1 | { | 
| 3 |  |  | Compute ambient position factors for genambpos.pl | 
| 4 |  |  | } | 
| 5 |  |  | and(a,b) : if(a,b,a); | 
| 6 |  |  | { level selector } | 
| 7 | greg | 2.2 | lvl = $10; | 
| 8 |  |  | wt = $11; | 
| 9 | greg | 2.4 | acond = and( wt-MW, if(LV+.5, and(lvl-LV+.5,LV+.5-lvl), 6.5-lvl) ); | 
| 10 | greg | 2.1 | px = $1; py = $2; pz = $3; | 
| 11 |  |  | r0 = SF*$12; r1 = SF*$13; | 
| 12 |  |  | nx = $4; ny = $5; nz = $6; | 
| 13 |  |  | ux = $7; uy = $8; uz = $9; | 
| 14 |  |  | vx = ny*uz - nz*uy; | 
| 15 |  |  | vy = nz*ux - nx*uz; | 
| 16 |  |  | vz = nx*uy - ny*ux; | 
| 17 | greg | 2.3 | avr = .5/PI*$14; avg = .5/PI*$15; avb = .5/PI*$16; | 
| 18 | greg | 2.1 | { magnified position gradient } | 
| 19 |  |  | pgx = ($17*ux + $18*vx)/SF; | 
| 20 |  |  | pgy = ($17*uy + $18*vy)/SF; | 
| 21 |  |  | pgz = ($17*uz + $18*vz)/SF; | 
| 22 |  |  | pg = sqrt(pgx*pgx + pgy*pgy + pgz*pgz); | 
| 23 | greg | 2.4 | pcond = and( acond, pg - .0001 ); | 
| 24 | greg | 2.1 | { direction gradient } | 
| 25 |  |  | dgx = $19*ux + $20*vx; | 
| 26 |  |  | dgy = $19*uy + $20*vy; | 
| 27 |  |  | dgz = $19*uz + $20*vz; | 
| 28 |  |  | val = avr + avg + avb;          { ambient position color } | 
| 29 | greg | 2.2 | agr = select(lvl+1, val, 0, 0, val, 0, val, val); | 
| 30 |  |  | agg = select(lvl+1, 0, val, 0, val, val, 0, val/2); | 
| 31 |  |  | agb = select(lvl+1, 0, 0, val, 0, val, val, val/2); | 
| 32 | greg | 2.1 | psiz = r0/10; | 
| 33 | greg | 2.4 | dcond = and( acond, dgx*dgx+dgy*dgy+dgz*dgz - 1e-8 ); | 
| 34 | greg | 2.1 | { base polygon vertices } | 
| 35 |  |  | px1 = px + r0*ux + r1*vx + .0001*nx; | 
| 36 |  |  | py1 = py + r0*uy + r1*vy + .0001*ny; | 
| 37 |  |  | pz1 = pz + r0*uz + r1*vz + .0001*nz; | 
| 38 |  |  | px2 = px - r0*ux + r1*vx + .0001*nx; | 
| 39 |  |  | py2 = py - r0*uy + r1*vy + .0001*ny; | 
| 40 |  |  | pz2 = pz - r0*uz + r1*vz + .0001*nz; | 
| 41 |  |  | px3 = px - r0*ux - r1*vx + .0001*nx; | 
| 42 |  |  | py3 = py - r0*uy - r1*vy + .0001*ny; | 
| 43 |  |  | pz3 = pz - r0*uz - r1*vz + .0001*nz; | 
| 44 |  |  | px4 = px + r0*ux - r1*vx + .0001*nx; | 
| 45 |  |  | py4 = py + r0*uy - r1*vy + .0001*ny; | 
| 46 |  |  | pz4 = pz + r0*uz - r1*vz + .0001*nz; | 
| 47 |  |  | alen = psiz*3;                  { arrow length & coordinates } | 
| 48 |  |  | cx0 = px + psiz*psiz/alen*pgx/pg; | 
| 49 |  |  | cy0 = py + psiz*psiz/alen*pgy/pg; | 
| 50 |  |  | cz0 = pz + psiz*psiz/alen*pgz/pg; | 
| 51 |  |  | cr0 = psiz*sqrt(1 - psiz*psiz/(alen*alen)); | 
| 52 |  |  | cx1 = px + alen*pgx/pg; | 
| 53 |  |  | cy1 = py + alen*pgy/pg; | 
| 54 |  |  | cz1 = pz + alen*pgz/pg; |