Last active
September 17, 2023 03:30
-
-
Save nanjizal/e56e3fa8f8ac5de0f14b1650d2866fe4 to your computer and use it in GitHub Desktop.
TauRadian.hx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//https://try.haxe.org/#100D46B4 | |
function main() { | |
trace( 'Math.PI' ); | |
var val = [ tau+pie | |
, tau+pie_2 | |
, tau | |
, tau3_4 | |
, pie | |
, pie_2 | |
, 0 | |
, -pie_2 | |
, -pie | |
, -tau3_4 | |
, -tau | |
, -tau-pie_2 | |
, -tau-pie ]; | |
for( i in val ){ | |
trace( '__ ' + tauLimit( i ) ); | |
} | |
trace( 'smallest' ); | |
trace( smallest( tau, tau3_4 ) ); | |
trace( smallest( tau, pie_2 ) ); | |
var v = 0.; | |
var step = Math.PI/18; | |
var target = pie_2; | |
var small = smallest( v, target); | |
if( small < 0. ) step = -step; | |
var count = Math.floor( small/step ); | |
for( i in 0...count ){ | |
trace( '______' + tauLimit( v ) ); | |
v += step; | |
trace( ' ' ); | |
} | |
trace('______' + tauLimit( target ) ); | |
trace(''); | |
} | |
var epsilon( get, never ): Float; | |
inline | |
function get_epsilon(): Float { | |
return 0.000000000000005; | |
} | |
var pie_2( get, never ): Float; | |
inline | |
function get_pie_2(): Float { | |
return pie/2; | |
} | |
var tau3_4( get, never ): Float; | |
inline | |
function get_tau3_4(): Float { | |
return pie+pie_2; | |
} | |
var pie( get, never ): Float; | |
inline | |
function get_pie(): Float { | |
return Math.PI; | |
} | |
var tau( get, never ): Float; | |
inline | |
function get_tau(): Float { | |
return 2*pie; | |
} | |
inline | |
function tauDivisor( val: Float ): Float { | |
return Math.ceil( val/tau )-1.; | |
} | |
inline | |
function minusTau( val: Float ): Float { | |
var divisor = tauDivisor( val ); | |
return ( divisor>0)? tau*divisor: 0; | |
} | |
inline | |
function tauNormalize( val: Float ): Float { | |
return val - minusTau( val ); | |
} | |
inline | |
function clean0( val: Float ){ | |
return ( | |
( val > tau - epsilon && val < tau + epsilon ) | |
|| | |
( val > - epsilon && val < epsilon ) | |
)? 0.: val; | |
} | |
inline | |
function tauLimit( val: Float, zero: Bool = false ): Float { | |
var out = ( val >= 0 )? tauNormalize( val ): tau-tauNormalize( -val ); | |
return ( zero )? clean0(out): out; | |
} | |
inline | |
function pi2piLimit( val: Float ): Float { | |
return if( val >= 0 ){ | |
var temp = tauNormalize( val ); | |
( temp > Math.PI )? -2*Math.PI + temp: temp; | |
} else { | |
var temp = -tauNormalize( -val ); | |
( temp < -Math.PI )? temp + 2*Math.PI: temp; | |
} | |
} | |
inline | |
function smallest( v1: Float, v2: Float ){ | |
var t1 = tauLimit( v1, true ); | |
var t2 = tauLimit( v2, true ); | |
var dif: Float; | |
return if( t1 == t2 ){ | |
0.; | |
} else if( t1 < t2 ){ | |
dif = t2 - t1; | |
if( dif < Math.PI ){ | |
dif; | |
} else { | |
-(2*Math.PI-dif); | |
} | |
} else { | |
dif = t1 - t2; | |
if( dif < Math.PI ){ | |
-dif; | |
} else { | |
(2*Math.PI-dif); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment