| 1 | greg | 2.4 | { RCSid $Id: ambpos.cal,v 2.3 2014/05/01 03:00:59 greg Exp $ } | 
| 2 | greg | 2.1 | { | 
| 3 |  |  | Compute patterns for ambient position markers | 
| 4 |  |  | } | 
| 5 | greg | 2.4 | odd(n) : .5*n - floor(.5*n) - .25; | 
| 6 |  |  | posangle(a) : if(-a, a + 2*PI, a) / DEGREE; | 
| 7 | greg | 2.1 | { Relative hit point } | 
| 8 |  |  | rpx = Px - arg(1); | 
| 9 |  |  | rpy = Py - arg(2); | 
| 10 |  |  | rpz = Pz - arg(3); | 
| 11 |  |  |  | 
| 12 |  |  | { Calculation of directional gradient pattern } | 
| 13 |  |  | ndx = arg(4); ndy = arg(5); ndz = arg(6); | 
| 14 |  |  | dgx = arg(7); dgy = arg(8); dgz = arg(9); | 
| 15 | greg | 2.2 | rdx = ndy*rpz - ndz*rpy; | 
| 16 |  |  | rdy = ndz*rpx - ndx*rpz; | 
| 17 |  |  | rdz = ndx*rpy - ndy*rpx; | 
| 18 |  |  | dgrad = (rdx*dgx + rdy*dgy + rdz*dgz)/sqrt(rpx*rpx + rpy*rpy + rpz*rpz); | 
| 19 |  |  | dirfunc = bound(0, 1 + dgrad, 2); | 
| 20 |  |  |  | 
| 21 | greg | 2.1 | { Calculation of positional gradient pattern } | 
| 22 |  |  | pgx = arg(4); pgy = arg(5); pgz = arg(6); | 
| 23 |  |  | posfunc = bound(0, 1 + (pgx*rpx + pgy*rpy + pgz*rpz), 2); | 
| 24 | greg | 2.4 | { corral flags and associated pattern } | 
| 25 |  |  | ux = arg(4); uy = arg(5); uz = arg(6); | 
| 26 |  |  | cflags = arg(7); | 
| 27 |  |  | vx = Ny*uz - Nz*uy; | 
| 28 |  |  | vy = Nz*ux - Nx*uz; | 
| 29 |  |  | vz = Nx*uy - Ny*ux; | 
| 30 |  |  | cflg(i) = if(odd(floor( cflags / 2^i )), 1, -1); | 
| 31 |  |  | corralled = cflg(floor(32/360*posangle( | 
| 32 |  |  | atan2(rpx*vx+rpy*vy+rpz*vz, rpx*ux+rpy*uy+rpz*uz) ))); | 
| 33 | greg | 2.1 |  | 
| 34 |  |  | { Calculation of ellipse stencil for base } | 
| 35 |  |  | usx = arg(4); usy = arg(5); usz = arg(6); | 
| 36 |  |  | vsx = arg(7); vsy = arg(8); vsz = arg(9); | 
| 37 |  |  | ellipstencil = if(1 - sq(usx*rpx + usy*rpy + usz*rpz) - sq(vsx*rpx + vsy*rpy + vsz*rpz), | 
| 38 |  |  | 1, 0); |