Skip to content

Instantly share code, notes, and snippets.

@nanjizal
Last active September 17, 2023 03:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nanjizal/e56e3fa8f8ac5de0f14b1650d2866fe4 to your computer and use it in GitHub Desktop.
Save nanjizal/e56e3fa8f8ac5de0f14b1650d2866fe4 to your computer and use it in GitHub Desktop.
TauRadian.hx
//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