あもんノート TOP
JS 実行
■黄色いテキストエリアに
JavaScript のコードを書き実行ボタンを押すと実行されます。
■青いテキストエリアはテキスト出力用です( ID = "text" )。
■白い領域はグラフィックス出力用です( ID = "canvas", サイズ = 800×800 )。
■便利なオブジェクト・クラスがビルトインされています。
詳細は
こちら。
Text = {}
Text.init = function(){
this.element = document.getElementById( "text" )
}
Text.clear = function(){
this.element.value = ""
}
Text.get = function(){
return this.element.value
}
Text.put = function(){
if( arguments.length > 0 ) this.element.value += arguments[0]
}
Text.putln = function(){
this.put( ... arguments )
this.put( "\n" )
}
Text.putN = function(){
if( arguments.length == 0 ) return
var n = arguments[0]
if( typeof n != "number" || isNaN( n ) ){
this.put( n ); return
}
var N = 7
if( typeof arguments[1] == "number" ){
N = Number( arguments[1] ) - 1
}
if( Math.abs( n ) >= 1e-2 && Math.abs( n ) < 1e5 ){
this.put( Number( n.toExponential( N ) ) )
} else if( n == 0 ){
this.put( 0 )
} else {
var s = n.toExponential( N )
var p, c
while( true ){
p = s.indexOf( "e" ); if( p < 0 ) break
c = s.substr( p - 1, 1 )
if( c == "0" || c == "." ){
s = s.substr( 0, p - 1 ) + s.substr( p )
continue
}
break
}
this.put( s )
}
}
Text.putlnN = function(){
this.putN( ... arguments )
this.put( "\n" )
}
Coordinates = {}
Coordinates.init = function(){
this.gra = document.getElementById( "canvas" ).getContext( "2d" )
this.x1 = -10; this.x2 = 10; this.y1 = -10; this.y2 = 10
this.gra.lineWidth = 2
this.gra.font = "32px sans-serif"
}
Coordinates.range = function(){
if( arguments.length == 2 ){
this.x1 = arguments[0]; this.x2 = arguments[1]
this.y1 = arguments[0]; this.y2 = arguments[1]
}
if( arguments.length == 4 ){
this.x1 = arguments[0]; this.x2 = arguments[1]
this.y1 = arguments[2]; this.y2 = arguments[3]
}
if( this.x1 == this.x2 || this.y1 == this.y2 ){
this.x1 = -10; this.x2 = 10
this.y1 = -10; this.y2 = 10
}
this.clear()
}
Coordinates.xs = function( x ){
return ( x - this.x1 ) * 800 / ( this.x2 - this.x1 )
}
Coordinates.ys = function( y ){
return 800 - ( y - this.y1 ) * 800 / ( this.y2 - this.y1 )
}
Coordinates.clear = function(){
var fs = this.gra.fillStyle
this.gra.fillStyle = "white"
this.gra.fillRect( 0, 0, 800, 800 )
this.gra.fillStyle = fs
}
Coordinates.point = function( x, y ){
this.gra.lineWidth = 1
this.gra.beginPath()
this.gra.arc( this.xs(x), this.ys(y), 1, 0, 2 * Math.PI )
this.gra.stroke()
this.gra.lineWidth = 2
}
Coordinates.circle = function( x, y, r ){
var i, x1, y1
var div = 50
var dth = 2 * Math.PI / div
this.gra.beginPath()
this.gra.moveTo( this.xs(x+r), this.ys(y) )
for( i = 1; i <= div; i++ ){
x1 = x + r * Math.cos( i * dth )
y1 = y + r * Math.sin( i * dth )
this.gra.lineTo( this.xs(x1), this.ys(y1) )
}
this.gra.stroke()
}
/*
Coordinates.circle = function( x, y, r ){
var rs = 800 / ( this.x2 - this.x1 ) * r
this.gra.beginPath()
this.gra.arc( this.xs(x), this.ys(y), rs, 0, 2 * Math.PI )
this.gra.stroke()
}
Coordinates.fillCircle = function( x, y, r ){
var rs = 800 / ( this.x2 - this.x1 ) * r
this.gra.beginPath()
this.gra.arc( this.xs(x), this.ys(y), rs, 0, 2 * Math.PI )
this.gra.fill()
}
*/
Coordinates.line = function( x1, y1, x2, y2 ){
this.gra.beginPath()
this.gra.moveTo( this.xs(x1), this.ys(y1) )
this.gra.lineTo( this.xs(x2), this.ys(y2) )
this.gra.stroke()
}
Coordinates.rect = function( x, y, width, height ){
var w = width / ( this.x2 - this.x1 ) * 800
var h = height / ( this.y1 - this.y2 ) * 800
this.gra.strokeRect( this.xs(x), this.ys(y), w, h )
}
/*
Coordinates.fillRect = function( x, y, width, height ){
var w = width / ( this.x2 - this.x1 ) * 800
var h = height / ( this.y1 - this.y2 ) * 800
this.gra.fillRect( this.xs(x), this.ys(y), w, h )
}
*/
Coordinates.axis = function(){
if( arguments.length == 1 ) var yg = arguments[0]
if( arguments.length > 1 ) var yg = arguments[1]
if( arguments.length > 0 ){
var xg = arguments[0]
var fs = this.gra.strokeStyle
this.gra.strokeStyle = "lightgray"
for( var x = 0; x <= this.x2; x += xg ){
this.line( x, this.y1, x, this.y2 )
}
for( var x = 0; x >= this.x1; x -= xg ){
this.line( x, this.y1, x, this.y2 )
}
for( var y = 0; y <= this.y2; y += yg ){
this.line( this.x1, y, this.x2, y )
}
for( var y = 0; y >= this.y1; y -= yg ){
this.line( this.x1, y, this.x2, y )
}
this.gra.strokeStyle = fs
}
this.line( this.x1, 0, this.x2, 0 )
this.line( 0, this.y1, 0, this.y2 )
}
Coordinates.text = function( s, x, y ){
this.gra.fillText( s, this.xs(x), this.ys(y) )
}
Coordinates.graph = function( f, n ){
if( n == undefined ) n = 1
var dx = ( this.x2 - this.x1 ) / 400 / n
for( var x = this.x1; x <= this.x2; x += dx ){
this.point( x, f( x ) )
}
}
Numerical = {}
Numerical.summation = function( f, a, b ){
if( a > b ) return NaN
var s = f( a )
for( var n = a + 1; n <= b; n++ ){
if( typeof s == "number" ) s += f( n )
if( typeof s != "number" ) s = s.add( f( n ) )
}
return s
}
Numerical.product = function( f, a, b ){
if( a > b ) return NaN
var s = f( a )
for( var n = a + 1; n <= b; n++ ){
if( typeof s == "number" ) s *= f( n )
if( typeof s != "number" ) s = s.times( f( n ) )
}
return s
}
Numerical.permutation = function( n, m ){
if( m < 0 || m > n ) return NaN
if( m == 0 ) return 1
var f = function( i ){ return i }
return this.product( f, n - m + 1, n )
}
Numerical.factorial = function( n ){
return this.permutation( n, n )
}
Numerical.combination = function( n, m ){
return this.permutation( n, m ) / this.factorial( m )
}
Numerical.integral = function( f, a, b, div ){
var n = 2 * div, h = ( b - a ) / n
var x = function( i ){ return a + h * i }
if( typeof f( a ) == "number" ){
var s = f( a ) + f( b )
for( var i = 1; i <= n/2; i++ ) s += 4 * f( x( 2 * i - 1 ) )
for( var i = 1; i <= n/2 - 1; i++ ) s += 2 * f( x( 2 * i ) )
return h / 3 * s
} else{
var s = f( a ).add( f( b ) )
for( var i = 1; i <= n/2; i++ )
s = s.add( f( x( 2 * i - 1 ) ).times( 4 ) )
for( var i = 1; i <= n/2 - 1; i++ )
s = s.add( f( x( 2 * i ) ).times( 2 ) )
return s.times( h / 3 )
}
}
Numerical.zero = function( f, x1, x2, eps ){
if( x1 >= x2 ) return NaN
if( x2 - x1 < eps ) return x1
var y1 = f(x1); if( y1 == 0 ) return x1
var y2 = f(x2); if( y2 == 0 ) return x2
if( y1 * y2 > 0 ) return NaN
var xm = ( x1 + x2 ) / 2, ym = f(xm)
if( y1 * ym <= 0 ) return this.zero( f, x1, xm, eps )
if( ym * y2 <= 0 ) return this.zero( f, xm, x2, eps )
}
Numerical.evolution = function( x0, der, h, N ){
var D = x0.length - 1
var xd = []; for( j = 0; j <= D; j++ ) xd[j] = []
var x = []; for( j = 0; j <= D; j++ ) x[j] = x0[j]
var y = [], a = [], b = [], c = [], d =[]
for( i = 0; i <= N; i++ ){
for( j = 0; j <= D; j++ ) xd[j][i] = x[j]
for( j = 0; j <= D; j++ ) a[j] = der( x, j )
for( j = 0; j <= D; j++ ) y[j] = x[j] + h * a[j] / 2
for( j = 0; j <= D; j++ ) b[j] = der( y, j )
for( j = 0; j <= D; j++ ) y[j] = x[j] + h * b[j] / 2
for( j = 0; j <= D; j++ ) c[j] = der( y, j )
for( j = 0; j <= D; j++ ) y[j] = x[j] + h * c[j]
for( j = 0; j <= D; j++ ) d[j] = der( y, j )
for( j = 0; j <= D; j++ ){
x[j] += h * ( a[j] + 2*b[j] + 2*c[j] + d[j] ) / 6
}
}
return xd
}
Complex = function( re, im ){
this.re = re
this.im = im
if( re == undefined ) this.re = 0
if( im == undefined ) this.im = 0
}
Complex.prototype.toString = function(){
var re = Number( this.re.toExponential( 7 ) )
var im = Number( this.im.toExponential( 7 ) )
return "(" + re + "," + im + ")"
}
Complex.prototype.isZero = function(){
if( this.re == 0 && this.im == 0 ) return true
return false
}
Complex.prototype.abs = function(){
return ( this.re ** 2 + this.im ** 2 ) ** 0.5
}
Complex.prototype.conj = function(){
return new this.constructor( this.re, -1 * this.im )
}
Complex.prototype.add = function( a ){
if( typeof a == "number" ){
return new this.constructor( this.re + a, this.im )
}
return new this.constructor( this.re + a.re, this.im + a.im )
}
Complex.prototype.sub = function( a ){
if( typeof a == "number" ){
return new this.constructor( this.re - a, this.im )
}
return new this.constructor( this.re - a.re, this.im - a.im )
}
Complex.prototype.times = function( a ){
if( typeof a == "number" ){
return new this.constructor( this.re * a, this.im * a )
}
var re = this.re * a.re - this.im * a.im
var im = this.re * a.im + this.im * a.re
return new this.constructor( re, im )
}
Complex.prototype.div = function( a ){
if( typeof a == "number" ){
return new this.constructor( this.re / a, this.im / a )
}
return this.times( a.conj() ).div( a.abs() ** 2 )
}
Complex.prototype.inv = function(){
return new this.constructor( 1, 0 ).div( this )
}
Complex.prototype.exp = function(){
var m = Math
var re = m.exp( this.re ) * m.cos( this.im )
var im = m.exp( this.re ) * m.sin( this.im )
return new this.constructor( re, im )
}
Complex.prototype.cos = function(){
var i = new Complex( 0, 1 )
var a = i.times( this ).exp()
var b = i.times( -1 ).times( this ).exp()
return a.add( b ).div( 2 )
}
Complex.prototype.sin = function(){
var i = new Complex( 0, 1 )
var a = i.times( this ).exp()
var b = i.times( -1 ).times( this ).exp()
return a.sub( b ).div( 2 ).div( i )
}
Complex.prototype.tan = function(){
return this.sin().div( this.cos() )
}
Complex.prototype.cosh = function(){
var a = this.exp()
var b = this.times( -1 ).exp()
return a.add( b ).div( 2 )
}
Complex.prototype.sinh = function(){
var a = this.exp()
var b = this.times( -1 ).exp()
return a.sub( b ).div( 2 )
}
Complex.prototype.tanh = function(){
return this.sinh().div( this.cosh() )
}
CMatrix = function( row, col ){
this.row = row
if( col == undefined ) col = row
this.col = col
this.ele = []
for( var i = 1; i <= row; i++ ){
this.ele[ i ] = []
for( var j = 1; j <=col; j++ ){
this.ele[ i ][ j ] = new Complex()
}
}
}
CMatrix.byArray = function( a ){
var row = a.length
var col = a[ 0 ].length
var b = new this( row, col )
var n
for( var i = 0; i < row; i++ )
for( var j = 0; j < col; j++ ){
n = a[ i ][ j ]
if( typeof n == "number" ){
b.ele[ i + 1 ][ j + 1 ] = new Complex( n )
} else{
b.ele[ i + 1 ][ j + 1 ] = n
}
}
return b
}
CMatrix.identity = function( n ){
var a = new CMatrix( n, n )
for( var i = 1; i <= n; i++ ){
a.ele[ i ][ i ] = new Complex( 1 )
}
return a
}
CMatrix.prototype.toString = function(){
var s = ""
for( var i = 1; i <= this.row; i++ ){
for( var j = 1; j <= this.col; j++ ){
s += this.ele[ i ][ j ].toString() + " "
}
if( i < this.row ) s += "\n"
}
return s
}
CMatrix.prototype.add = function( a ){
var b = new this.constructor( this.row, this.col )
for( var i = 1; i <= this.row; i++ )
for( var j = 1; j <= this.col; j++ ){
b.ele[ i ][ j ] = this.ele[ i ][ j ].add( a.ele[ i ][ j ] )
}
return b
}
CMatrix.prototype.sub = function( a ){
var b = new this.constructor( this.row, this.col )
for( var i = 1; i <= this.row; i++ )
for( var j = 1; j <= this.col; j++ ){
b.ele[ i ][ j ] = this.ele[ i ][ j ].sub( a.ele[ i ][ j ] )
}
return b
}
CMatrix.prototype.times = function( a ){
if( typeof a == "number" ||
a.constructor.name == "Complex" ){
var b = new this.constructor( this.row, this.col )
for( var i = 1; i <= this.row; i++ )
for( var j = 1; j <= this.col; j++ ){
b.ele[ i ][ j ] = this.ele[ i ][ j ].times( a )
}
return b
}
var b = new this.constructor( this.row, a.col )
for( var i = 1; i <= this.row; i++ )
for( var j = 1; j <= a.col; j++ )
for( var k = 1; k <= this.col; k++ ){
b.ele[ i ][ j ] = b.ele[ i ][ j ].add(
this.ele[ i ][ k ].times( a.ele[ k ][ j ] )
)
}
return b
}
CMatrix.prototype.conj = function(){
var b = new this.constructor( this.row, this.col )
for( var i = 1; i <= this.row; i++ )
for( var j = 1; j <= this.col; j++ ){
b.ele[ i ][ j ] = this.ele[ i ][ j ].conj()
}
return b
}
CMatrix.prototype.trans = function(){
var b = new this.constructor( this.col, this.row )
for( var i = 1; i <= b.row; i++ )
for( var j = 1; j <= b.col; j++ ){
b.ele[ i ][ j ] = this.ele[ j ][ i ]
}
return b
}
CMatrix.prototype.hermit = function(){
return this.conj().trans()
}
CMatrix.prototype.trace = function(){
var a = new Complex( 0, 0 )
for( var i = 1; i <= this.row; i++ ){
a = a.add( this.ele[ i ][ i ] )
}
return a
}
CMatrix.prototype.commute = function( a ){
return this.times( a ).sub( a.times( this ) )
}
CMatrix.prototype.anticommute = function( a ){
return this.times( a ).add( a.times( this ) )
}
CMatrix.prototype.det = function(){
if( this.row == 1 ) return this.ele[ 1 ][ 1 ]
if( this.row == 2 ){
var a = this.ele[ 1 ][ 1 ].times( this.ele[ 2 ][ 2 ] )
var b = this.ele[ 1 ][ 2 ].times( this.ele[ 2 ][ 1 ] )
return a.sub( b )
}
var k = new Complex( 0, 0 )
for( var j = 1; j <= this.col; j++ ){
if( this.ele[ 1 ][ j ].isZero() ) continue
k = k.add( this.ele[ 1 ][ j ].times( this.cofactor( 1, j ) ) )
}
return k
}
CMatrix.prototype.cofactor = function( i, j ){
if( this.row <= 1 ) return new Complex( 1 )
var a = new this.constructor( this.row - 1, this.col - 1 )
var x, y, xd, yd
for( x = 1; x <= a.row; x++ )
for( y = 1; y <= a.col; y++ ){
xd = x; if( i <= x ) xd = x + 1
yd = y; if( j <= y ) yd = y + 1
a.ele[ x ][ y ] = this.ele[ xd ][ yd ]
}
return a.det().times( (-1) ** ( i + j ) )
}
CMatrix.prototype.comatrix = function(){
var a = new this.constructor( this.row, this.col )
for( var i = 1; i <= a.row; i++ )
for( var j = 1; j <= a.col; j++ ){
a.ele[ i ][ j ] = this.cofactor( j, i )
}
return a
}
CMatrix.prototype.inv = function(){
return this.comatrix().times( this.det().inv() )
}
Phys = {}
Phys.init = function( alpha ){
this.PI = Math.PI
this.pi = Math.PI
this.E = Math.E
this.万 = 1e4
this.億 = 1e8
this.兆 = 1e12
this.京 = 1e16
this.thousand = 1e3
this.million = 1e6
this.billion = 1e9
this.trillion = 1e12
this.c = 1
this.k_0 = 1 / ( 4 * this.pi )
this.eps_0 = 1
this.mu_0 = 1
this.h = 2 * this.pi
this.hbar = 1
this.k_B = 1
this.N_A = 1
this.R = 1
this.alpha = alpha
this.e = ( 4 * this.pi * this.alpha )**0.5
this.G = 6.70883e-57
this.G_F = 1.16638e-23
this.kappa = 8 * this.pi * this.G
this.J = 1 / 1.602176634e-19
this.s = 2 * this.pi / 6.62607015e-34 / this.J
this.m = this.s / 2.99792458e8
this.C = this.e * this.J
this.K = 1.380649e-23 * this.J
this.mol = 6.02214076e23
this.Dnu_Cs = 9.19263177e9 / this.s
this.Hz = this.s**(-1)
this.kg = this.J * this.s**2 / this.m**2
this.N = this.J / this.m
this.W = this.J / this.s
this.Pa = this.N / this.m**2
this.A = this.C / this.s
this.V = this.J / this.C
this.Wb = this.V * this.s
this.T = this.Wb / this.m**2
this.Ohm = this.V / this.A
this.F = this.C / this.V
this.H = this.Wb / this.A
this.m_e = 0.51099895e6
this.m_p = 938.27209e6
this.m_n = 939.56542e6
this.m_mu = 105.6584e6
this.m_pi = 139.57e6
this.m_pi0 = 134.98e6
this.ms = 1e-3 * this.s
this.msec = 1e-3 * this.s
this.sec = this.s
this.min = 60 * this.s
this.hour = 60 * this.min
this.day = 24 * this.hour
this.year = 365.25 * this.day
this.cm = 1e-2 * this.m
this.mm = 1e-3 * this.m
this.micron = 1e-6 * this.m
this.km = 1e3 * this.m
this.M = 1852 * this.m
this.a = 1e2 * this.m**2
this.ha = 1e2 * this.a
this.l = 1e-3 * this.m**3
this.dl = 1e-1 * this.l
this.ml = 1e-3 * this.l
this.cc = this.ml
this.g = 1e-3 * this.kg
this.mg = 1e-3 * this.g
this.t = 1e3 * this.kg
this.ct = 0.2 * this.g
this.knot = this.M / this.hour
this.g_n = 9.80665 * this.m / this.s**2
this.Gal = this.cm * this.s**(-2)
this.kHz = 1e3 * this.Hz
this.MHz = 1e6 * this.Hz
this.GHz = 1e9 * this.Hz
this.THz = 1e12 * this.Hz
this.kgw = this.kg * this.g_n
this.dyn = this.g * this.cm / this.s**2
this.erg = this.dyn * this.cm
this.cal = 4.184 * this.J
this.kcal = 1e3 * this.cal
this.kW = 1e3 * this.W
this.PS = 75 * this.kgw * this.m / this.s
this.hPa = 1e2 * this.Pa
this.atm = 101325 * this.Pa
this.at = this.kgw / this.cm**2
this.mHg = this.atm / 0.76
this.mmHg = 1e-3 * this.mHg
this.Torr = this.mmHg
this.bar = 1e5 * this.Pa
this.mbar = 1e-3 * this.bar
this.mA = 1e-3 * this.A
this.kA = 1e3 * this.A
this.mV = 1e-3 * this.V
this.kV = 1e3 * this.V
this.mOhm = 1e-3 * this.Ohm
this.kOhm = 1e3 * this.Ohm
this.mF = 1e-3 * this.F
this.mH = 1e-3 * this.H
this.microF = 1e-6 * this.F
this.microH = 1e-6 * this.H
this.nF = 1e-9 * this.F
this.nH = 1e-9 * this.H
this.pF = 1e-12 * this.F
this.pH = 1e-12 * this.H
this.Fr = this.esu = this.statC = ( 4 * this.pi * this.dyn )**0.5 * this.cm
this.statA = this.statC / this.s
this.D = this.esu * this.cm * 1e-18
this.emu = this.esu * this.cm
this.Gs = this.Oe = this.dyn / this.Fr
this.statV = this.Gb = this.Gs * this.cm
this.Mx = this.Gs * this.cm ** 2
this.statOhm = this.statV / this.statA
this.statF = this.statC / this.statV
this.statH = this.statV * this.s / this.statA
this.AU = 1.495978707e11 * this.m
this.au = this.AU
this.ly = this.year
this.pc = this.AU / Math.tan( this.pi / 180 / 3600 )
this.M_e = 5.972e24 * this.kg
this.R_e = 6378 * this.km
this.M_s = 1.9891e30 * this.kg
this.R_s = 696000 * this.km
this.L_s = 3.839e26 * this.W
this.M_m = 7.3477e22 * this.kg
this.R_m = 1738 * this.km
this.r_m = 384400 * this.km
this.nm = 1e-9 * this.m
this.pm = 1e-12 * this.m
this.fm = 1e-15 * this.m
this.fermi = this.fm
this.Ang = 1e-10 * this.m
this.bn = 1e-28 * this.m**2
this.u = 9.3149410e8
this.eV = 1
this.meV = 1e-3
this.microeV = 1e-6
this.neV = 1e-9
this.peV = 1e-12
this.keV = 1e3
this.MeV = 1e6
this.GeV = 1e9
this.TeV = 1e12
this.lambda_C = 2 * this.pi / this.m_e
this.a_B = 4 * this.pi / this.m_e / this.e**2
this.Ry = this.m_e * this.e**4 / 32 / this.pi**2
this.R_infty = this.Ry / 2 / this.pi
this.mu_B = this.e / 2 / this.m_e
this.inch = 2.54 * this.cm
this.feet = 12 * this.inch
this.yard = 3 * this.feet
this.mile = 1760 * this.yard
this.acre = 4840 * this.yard**2
this.lb = 453.59237 * this.g
this.oz = this.lb / 16
this.dr = this.oz / 16
this.HP = 550 * this.lb * this.g_n * this.feet / this.s
this.psi = this.lb * this.g_n / this.inch**2
this.寸 = this.m / 33
this.尺 = 10 * this.寸
this.間 = 6 * this.尺
this.丈 = 10 * this.尺
this.町 = 60 * this.間
this.里 = 36 * this.町
this.坪 = this.間**2
this.畝 = 30 * this.坪
this.反 = 10 * this.畝
this.町歩 = 10 * this.反
this.合 = 2401 / 13310 * this.l
this.升 = 10 * this.合
this.斗 = 10 * this.升
this.石 = 10 * this.斗
this.匁 = 3.75 * this.g
this.両 = 10 * this.匁
this.斤 = 16 * this.両
this.貫 = 100 * this.両
this.deg = function( d ){
return Math.PI / 180 * d
}
this.bdeg = function( r ){
return 180 / Math.PI * r
}
this.degC = function( d ){
return ( 273.15 + d ) * this.K
}
this.bdegC = function( T ){
return T / this.K - 273.15
}
this.degF = function( d ){
return this.degC( 5 /9 * ( d - 32 ) )
}
this.bdegF = function( T ){
return 32 + 9 / 5 * this.bdegC( T )
}
}
Phys.set = function(){
for( var i in this ){
if( typeof this[i] == "number" ){
window[i] = this[i]
}
}
deg = function( a ){ return Phys.deg( a ) }
bdeg = function( a ){ return Phys.bdeg( a ) }
degC = function( a ){ return Phys.degC( a ) }
bdegC = function( a ){ return Phys.bdegC( a ) }
degF = function( a ){ return Phys.degF( a ) }
bdegF = function( a ){ return Phys.bdegF( a ) }
}
Text.init()
Coordinates.init()
Phys.init( 1 / 137.035999084 )