Name:
Anonymous
2011-04-20 21:50
const double Pi = 3.14159265358979323846264;
const double TWO_Pi = Pi*2.0;
const double HALF_Pi = Pi/2.0;
const double QUARTER_Pi = Pi/4.0;
const double Deg2Rad = Pi/180.0;
const double Rad2Deg = 180.0/Pi;
const float fDeg2Rad = static_cast(Deg2Rad);
const float fRad2Deg = static_cast(Rad2Deg);
const double OneThird = 1.0/3.0;
const double One3point6th = 1.0/3.6;
const double OneTwelfth = 1.0/12.0;
const double OneThirtysixth = 1.0/36.0;
const double One1760th = 1.0/1760;
const double One5280th = 1.0/5280;
const double One63360th = 1.0/63360.0;
const double One25Pt4th = 1.0/25.4; // 0.0393700787401575 mm -> inches
const double One2Pt54th = 1.0/2.54; // 0.393700787401575 cm -> inches
const double OnePt0254th = 1.0/0.0254; // 39.3700787401575 m -> inches
const double OnePt0000254th = 1.0/0.0000254; // 39370.0787401575 km -> inches
const double One2Pt20462262185th= 1.0/2.20462262185; // 0.453592369999748 Lbs-> Kg
const double One304Pt8th = 1.0/304.8; // 0.00328083989501312 mm -> feet
const double One30Pt48th = 1.0/30.48; // 0.0328083989501312 cm -> feet
const double OnePt3048th = 1.0/.3048; // 3.28083989501312 m -> feet
const double OnePt0003048th = 1.0/.0003048; // 3280.83989501312 km -> feet
const double One914Pt4th = 1.0/914.4; // 0.00109361329833771 mm -> yards
const double One91Pt44th = 1.0/91.44; // 0.0109361329833771 cm -> yards
const double OnePt9144th = 1.0/.9144; // 1.09361329833771 m -> yards
const double OnePt0009144th = 1.0/.0009144; // 1093.61329833771 km -> yards
const double One1609344th = 1.0/1609344; // 0.000000621371192237334 mm -> Miles
const double One160934Pt4th = 1.0/160934.4; // 0.00000621371192237334 cm -> Miles
const double One1609Pt344th = 1.0/1609.344; // 0.000621371192237334 m -> Miles
const double One1Pt609344th = 1.0/1.609344; // 0.621371192237334 km -> Miles
const double One4Pt44822th = 1.0/4.44822161525; // 0.224808943100241 Nt -> LbForce
const double OnePt737562th = 1.0/0.7375621493; // 1.35581794828961 FtLbs -> NtM
const double OnePt44704th = 1.0/0.44704; // 2.2369362920544 Mps -> Mph
const double One3Pt785411th = 1.0/3.78541178401; // 0.264172052357451 Liters -> Gallons
inline double Inches2Feet( const double &i ) { return i*OneTwelfth; } // 1/12
inline double Inches2Yards( const double &i ) { return i*OneThirtysixth; } // 1/36
inline double Inches2Miles( const double &i ) { return i*One63360th; } // 1/63360.0
inline double Inches2MM( const double &i ) { return i*25.4; }
inline double Inches2CM( const double &i ) { return i*2.54; }
inline double Inches2Meters( const double &i ) { return i*.0254; }
inline double Inches2KM( const double &i ) { return i*.0000254; }
inline double Feet2Inches( const double &f ) { return f*12.0; }
inline double Feet2Yards( const double &f ) { return f*OneThird; } // 1/3
inline double Feet2Miles( const double &f ) { return f*One5280th; } // 1/5280
inline double Feet2MM( const double &f ) { return f*304.8; }
inline double Feet2CM( const double &f ) { return f*30.48; }
inline double Feet2Meters( const double &f ) { return f*0.3048; }
inline double Feet2KM( const double &f ) { return f*0.0003048; }
inline double Yards2Inches( const double &y ) { return y*36.0; }
inline double Yards2Feet( const double &y ) { return y*3.0; }
inline double Yards2Miles( const double &y ) { return y*One1760th; } // 1/1760.0
inline double Yards2MM( const double &y ) { return y*914.4; }
inline double Yards2CM( const double &y ) { return y*91.44; }
inline double Yards2Meters( const double &y ) { return y*.9144; }
inline double Yards2KM( const double &y ) { return y*.0009144; }
inline double Miles2Inches( const double &mi ) { return mi*63360.0; }
inline double Miles2Feet( const double &mi ) { return mi*5280; }
inline double Miles2Yards( const double &mi ) { return mi*1760.0; }
inline double Miles2MM( const double &mi ) { return mi*1609344.0; }
inline double Miles2CM( const double &mi ) { return mi*160934.4; }
inline double Miles2Meters( const double &mi ) { return mi*1609.344; }
inline double Miles2KM( const double &mi ) { return mi*1.609344; }
inline double MM2CM( const double &mm ) { return mm*.1; }
inline double MM2Meters( const double &mm ) { return mm*.001; }
inline double MM2KM( const double &mm ) { return mm*.000001; }
inline double MM2Inches( const double &mm ) { return mm*One25Pt4th; } // 0.0393700787401575
inline double MM2Feet( const double &mm ) { return mm*One304Pt8th; } // 0.00328083989501312
inline double MM2Yards( const double &mm ) { return mm*One914Pt4th; } // 0.00109361329833771
inline double MM2Miles( const double &mm ) { return mm*One1609344th; } // 0.000000621371192237334
inline double CM2MM( const double &cm ) { return cm*10.0; }
inline double CM2Meters( const double &cm ) { return cm*.01; }
inline double CM2KM( const double &cm ) { return cm*.00001; }
inline double CM2Inches( const double &cm ) { return cm*One2Pt54th; } // 0.393700787401575
inline double CM2Feet( const double &cm ) { return cm*One30Pt48th; } // 0.0328083989501312
inline double CM2Yards( const double &cm ) { return cm*One91Pt44th; } // 0.0109361329833771
inline double CM2Miles( const double &cm ) { return cm*One160934Pt4th; } // 0.00000621371192237334
inline double Meters2MM( const double &m ) { return m*1000.0; }
inline double Meters2CM( const double &m ) { return m*100.0; }
inline double Meters2KM( const double &m ) { return m*.001; }
inline double Meters2Inches( const double &m ) { return m*OnePt0254th; } // 39.3700787401575
inline double Meters2Feet( const double &m ) { return m*OnePt3048th; } // 3.28083989501312
inline double Meters2Yards( const double &m ) { return m*OnePt9144th; } // 1.09361329833771
inline double Meters2Miles( const double &m ) { return m*One1609Pt344th; } // 0.000621371192237334
inline double KM2Meters( const double &km ) { return km*1000.0; }
inline double KM2CM( const double &km ) { return km*100000.0; }
inline double KM2MM( const double &km ) { return km*1000000.0; }
inline double KM2Inches( const double &km ) { return km*OnePt0000254th; } // 39370.0787401575
inline double KM2Feet( const double &km ) { return km*OnePt0003048th; } // 3280.83989501312
inline double KM2Yards( const double &km ) { return km*OnePt0009144th; } // 1093.61329833771
inline double KM2Miles( const double &km ) { return km*One1Pt609344th; } // 0.621371192237334
inline double Kph2Mph( const double &kph ) { return kph*One1Pt609344th; } // 0.621371192237334
inline double Mph2Kph( const double &mph ) { return mph*1.609344; }
inline double Kph2Mps( const double &kph ) { return kph*One3point6th; } // 1/3.6
inline double Mph2Mps( const double &mph ) { return mph*0.44704; }
inline double Fps2Mps( const double &fps ) { return fps*0.3048; }
inline double Mps2Mph( const double &mps ) { return mps*OnePt44704th; } // 2.2369362920544
inline double Mps2Kph( const double &mps ) { return mps*3.6; }
inline double Mps2Fps( const double &mps ) { return mps*OnePt3048th; } // 3.28083989501312
inline double Lbs2Kg( const double &lbs ) { return lbs*One2Pt20462262185th; } // 0.453592369999748
inline double Kg2Lbs( const double &kg ) { return kg*2.20462262185; }
inline double LbForce2Newtons( const double &lbs ) { return lbs*4.44822161525; }
inline double Newtons2LbForce( const double &nt ) { return nt*One4Pt44822th; } // 0.224808943100241
inline double FtLbs2NtMeters( const double &ftlbs ) { return ftlbs*OnePt737562th; } // 1.35581794828961
inline double NtMeters2FtLbs( const double &ntm ) { return ntm*0.7375621493; }
inline double Gallons2Liters( const double &l ) { return l*3.78541178401; }
inline double Liters2Gallons( const double &g ) { return g*One3Pt785411th; } // 0.264172052357451
inline double Radians2Degrees( const double &r ) { return r*Rad2Deg; } // rad*180/Pi
inline double Degrees2Radians( const double &d ) { return d*Deg2Rad; } // deg*Pi/180
inline double Rad2DegreesIfloat( const float &r ) { return double(r*fRad2Deg); } // rad*180/Pi
inline double Deg2RadiansIfloat( const float &d ) { return double(d*fDeg2Rad); } // deg*Pi/180
inline float floatRadians2Degrees(const double &r) { return float(r*Rad2Deg); } // rad*180/Pi
inline float floatDegrees2Radians(const double &d) { return float(d*Deg2Rad); } // deg*Pi/180
inline float floatRad2Degrees( const float &r ) { return r*fRad2Deg; } // rad*180/Pi
inline float floatDeg2Radians( const float &d ) { return d*fDeg2Rad; } // deg*Pi/180
Name:
Anonymous
2011-04-21 6:03
That was ENTERPRISE-Quality!
(define-values
(π 2π 1/2π 1/4π)
(let ((π (atan 0 -1)))
(values π (* 2 π) (/ π 2) (/ π 4))))
(define-values
(deg2rad rad2deg)
(values (/ π 180) (/ 180 π)))
(define-syntax define-inline
(syntax-rules ()
((_ (n . x) b)
(begin
(define (proc . x) b)
(define-syntax (n stx)
(syntax-case stx ()
((n . x) #'b)
(n (identifier? #'n) #'proc)))))))
(define-syntax define-inlines
(syntax-rules ()
((_ (n x b) ...)
(begin (define-inline (n . x) b) ...))))
(define-syntax define/mults
(syntax-rules ()
((_ (n y) ...)
(define-inlines (n (x) (* x y)) ...))))
(define-syntax (define/conv stx)
(define (id-append stx x y)
(datum->syntax
stx
(string->symbol
(string-append
(symbol->string (syntax->datum x)) "->"
(symbol->string (syntax->datum y))))))
(syntax-case stx ()
((_ n m b)
(let* ((b (syntax->datum #'b)) (1/b (/ b)))
(with-syntax ((n->m (id-append #'n #'n #'m))
(m->n (id-append #'n #'m #'n)))
#`(define/mults (n->m #,b) (m->n #,1/b)))))))
(define-syntax (define/meters stx)
(define (id-append stx x y)
(datum->syntax stx (string->symbol (string-append (symbol->string x) (symbol->string y)))))
(syntax-case stx ()
((_ n b)
(let* ((bb (inexact->exact (syntax->datum #'b))) (bb/10 (/ bb 10)) (bb/1000 (/ bb 1000)) (bb/1e6 (/ bb 1000000)))
#`(begin (define/conv n millimeters #,bb)
(define/conv n centimeters #,bb/10)
(define/conv n meters #,bb/1000)
(define/conv n kilometers #,bb/1e6))))))
(define/conv feet inches 12)
(define/conv yards inches 36)
(define/conv yards feet 3)
(define/conv miles inches 63360)
(define/conv miles yards 1760)
(define/conv miles feet 5280)
(define/meters inches 25.4)
(define/meters feet 304.8)
(define/meters yards 914.4)
(define/meters miles 1609344)
(define/conv millimeters centimeters .1)
(define/conv millimeters meters .001)
(define/conv millimeters kilometers 1e-6)
(define/conv centimeters millimeters 10)
(define/conv centimeters meters .1)
(define/conv centimeters kilometers 1e-5)
(define/conv meters millimeters 1000)
(define/conv meters centimeters 100)
(define/conv meters kilometers 1e-3)
(define/conv kilometers millimeters 1e6)
(define/conv kilometers centimeters 1e5)
(define/conv kilometers meters 1000)
(define/conv mph km/h 1.609344)
(define/conv m/s km/h 3.6)
(define/conv mph m/s .44704)
(define/conv fps m/s .3048)
(define/conv kg lbs 2.20462262185)
(define/conv lbforce newtons 4.44822161525)
(define/conv newton/meters feet/lbs .7375621493)
(define/conv gallons liters 3.78541178401)
(define/mults
(rad->deg rad2deg)
(deg->rad deg2rad))