diff --git a/language.version b/language.version index a8ded76ae..84f721fb8 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r184 \cu(Sun 17 Jul 12:40:44 CEST 2022)\c-"; -SWWM_SHORTVER="\cw1.3pre r184 \cu(2022-07-17 12:40:44)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r185 \cu(Sun 17 Jul 12:42:31 CEST 2022)\c-"; +SWWM_SHORTVER="\cw1.3pre r185 \cu(2022-07-17 12:42:31)\c-"; diff --git a/zscript/utility/swwm_utility.zsc b/zscript/utility/swwm_utility.zsc index e985d998e..85005ab1d 100644 --- a/zscript/utility/swwm_utility.zsc +++ b/zscript/utility/swwm_utility.zsc @@ -340,6 +340,24 @@ Class SWWMUtility } } + // "fast" exponentiation with integer exponents using loops + static clearscope double IntPowF( double base, int exp ) + { + if ( exp < 0 ) return 1./IntPowF(base,-exp); + if ( exp == 0 ) return 1.; + double rslt = base; + for ( int i=0; i=0; i-- ) { - int d = int(val/(10**i))%10; + int d = int(val/IntPow(10,i))%10; str.AppendCharacter(digs[d]); } return str; @@ -578,13 +596,13 @@ Class SWWMUtility Vector3 amin = ap+(-a.radius,-a.radius,0), amax = ap+(a.radius,a.radius,a.height); double distsq = 0.; - if ( p.x < amin.x ) distsq += (amin.x-p.x)**2; - if ( p.x > amax.x ) distsq += (p.x-amax.x)**2; - if ( p.y < amin.y ) distsq += (amin.y-p.y)**2; - if ( p.y > amax.y ) distsq += (p.y-amax.y)**2; - if ( p.z < amin.z ) distsq += (amin.z-p.z)**2; - if ( p.z > amax.z ) distsq += (p.z-amax.z)**2; - return (distsq <= (radius**2)); + if ( p.x < amin.x ) distsq += (amin.x-p.x)*(amin.x-p.x); + if ( p.x > amax.x ) distsq += (p.x-amax.x)*(p.x-amax.x); + if ( p.y < amin.y ) distsq += (amin.y-p.y)*(amin.y-p.y); + if ( p.y > amax.y ) distsq += (p.y-amax.y)*(p.y-amax.y); + if ( p.z < amin.z ) distsq += (amin.z-p.z)*(amin.z-p.z); + if ( p.z > amax.z ) distsq += (p.z-amax.z)*(p.z-amax.z); + return (distsq <= (radius*radius)); } // Liang-Barsky line clipping