ご利用にあたって 関数一覧 minIndex/maxIndex 最小値、最大値要素の添字 sumExx 合計値 fixIntDec 数値を小数点固定した文字列に変換 normalizeScale 目盛の正規化 decHMS/HMSdec 時分秒⇔小数 変換 atan2PI Math.atan(y/x)の値を0≦θ<2πの範囲に変換 typeofEx typeofの拡張。vector や mayrix などのタイプ追加 checkType typeOf に特殊タイプも対象に compareType 特殊タイプも含めた2変数の大小比較 functionLiteral 関数名をリテラルで与える getColor 色見本表示から色の値を得る
スカラー i = minIndex(20, 10, 20, 10); i = ベクトル var v = [20, 10, 20, 10]; i = minIndex(v); i = マトリクス全体 m = [ [ 0, 1, 2, 3], [10, 11,-12, 13], [20, 21, 22, 23] ]; i = minIndex(m); i = (該当行 * 列数 + 該当列 = 1+4+2 = 6 のようにしています。) マトリクス列指定 i = minIndex(m, 2); i = マトリクス行指定 i = minIndex(m[1]) としてベクトルになります。
スカラー sum = sumEx(20, 10, 20, 10); sum = ベクトル var v = [20, 10, 20, 10]; sum = sumEx(v); sum = マトリクス全体 m = [ [ 0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23] ]; sum = sumEx(m); sum = マトリクス列指定 sum = sumEx(m, 2); sum = マトリクス行指定 sum = sumEx(m[1]) としてベクトルになります。
数表作成で桁数とともに小数点位置をそろえる必要がある場合に役立ちます。 小数点があるので、全体の桁数は「整数部桁数 + 1 + 小数部桁数」になります。 数値の小数点以下の桁数が小数部桁数より大のときは、右側を切り捨てます。 数値の小数点以下の桁数が小数部桁数より小のときは、右側に半角空白が詰められます。 数値の整数部桁数が指定した整数部桁数より小の場合は、左側に半角空白が詰められます。 数値の整数部桁数が指定した整数部桁数より大の場合は、小数点の位置を右にづらします。 数値の整数部桁数がそれより大の場合は、指数表示あるいは Infinity とします。
例示
数値 fixIntDec(数値,4,2) 実際の半角空白を「*」で表示しています // 絶対値が指定範囲のとき。小数点位置が固定される 12 **12*** 12.0 **12*** // .0 は小数点なし整数とされる 12.3 **12.3* +12.3 **12.3* // + 符号は無視される -12.3 *-12.3* - 12.3 *-12.3* // - 符号の後の空白は無視される 0.12345 ***0.12 -0.12345 **-0.12 0.12999 ***0.12 // 指定小数点以下はカットされる(四捨五入ではない) 0.000123 ***0.00 123.4567 *123.45 -123.4567 -123.45 // 絶対値が大のとき 12345 12345** // 整数部が大きいが、表現できるときは小数点を下げる -123456 -123456 123456789 1.23e+8 // さらに大きいが全体の桁数で指数表示できるときは指数表示 -123469134 -1.2e+8 1234567890123 Infinit // さらに大で指数表示もできない場合は Infinity とする -1234567890123 -Infini
テスト
実数の仮数部・指数部分離
実数 x を、仮数部を0以上1未満の実数で、先頭に0が連続しないものとし、指数部は10を基数とした正負整数としたときの、仮数部の値と、指数部の値を求める。
例:extractParts(123.45) → [0.12345, 3]
グラフを描画するとき、X軸の目盛りや補助線の位置を、2、5、10といったキリの良い点で決めたくなります。
ここでは、最小値(xmin)と最大値(xmax)、および、キザミの個数の最小値(nmin)と最大値(nmax)を与えて、
for (i=imin; i<=imax; i=i+di) {
目盛りや補助線の作成
}
となる imin, imax, di を戻します。n はキザミの個数
di をキリの良い値にするために、nmin≦n≦. nmax にならないことがあります。
例示
入 力 → 出 力 xmin xmax nmin nmax imin imax di n 5 96 3 15 0 100 10 9 -3.5 12.3 7 10 -4 14 2 8 50101 50203 5 11 50100 50210 10 10 0.011 0.031 5 11 0.010 0.032 0.002 10
テスト
時間、角度、緯度、経度など60進法で、時分秒表示と、時の小数点表示の変換をします。
全ての値は正数、時と分は整数とします。
θ = atan2PI( 2, 1.732) = (1/3)π θ = atan2PI(-2, 1.732) = (2/3)π θ = atan2PI(-2,-1.732) = (4/3)π θ = atan2PI(-2, 1.732) = (5/3)π
標準機能の typeof では、多くのタイプが object になりますが、いくつかのタイプを追加しました。 ここでは、連想配列を対象にせず、undefind になります。、
変数 | タイプ |
10 | 'number' |
[10, 20] | 'vector' |
[ [10, 20]. [30, 40] ] | 'matrix' |
'aaa' | 'string' |
['aaa', 1] | 'stringvector' |
[['aaa', 1], ['bbb',2]] | 'stringmatrix' |
'' | '' |
null | 'null' |
{"a":100, "b":"200} | '{}' |
new Map() | 'Map' |
ここでは、次のタイプを対象にします。このうち、""(空白)、null、undefinedをここでは特殊タイプといいます。
d(digital):null を含まない数値実施には、単独のタイプを判別するだけでなく、"bnu"(特殊タイプか否か、"sb"(""を含む文字列か)など組合せによる判別が必要になることがあります。checkType()はそれをまとめたものです。内容は比較的シンプルです。
function(変数, タイプ) { if (タイプ == "u") return (変数 === undefined); if (タイプ == "b") return ( (変数 == '') && (typeof 変数 == 'string') ); if (タイプ == "n") return ( (変数 == null) && (typeof 変数 == 'object') ); if (タイプ == "bu") return ( (変数 === undefined) || (変数 == '') && (typeof 変数 == 'string') ); if (タイプ == "nu") return (変数 == null); if (タイプ == "bnu") return ( (変数 == null) || (変数 == '') && (typeof 変数 == 'string') ); if (タイプ == "s") return ( isNaN(変数) && (typeof 変数 == 'string') ); if (タイプ == "sb") return (typeof 変数 == 'string'); if (タイプ == "d") return ( (typeof 変数 == 'number') && !isNaN(変数) ); if (タイプ == "dn") return ( (typeof 変数 == 'object') || (typeof 変数 == 'number') && !isNaN(変数) ); };
変数xのタイプがtypeならば true を、そうでなければ false を戻します。
if (checkType(x, "bu"))
では、x が "" あるいは undefind のときは true、そうでないときは faise を戻します。
ここでは、undefined, null, ""(空白)を「特殊タイプ」といいます。
ここでは次のデータ
var x = [];
x[0] = ""; x[1] = null; x[2] = undefined; x[3] = NaN; x[4] = 0; x[5] = "5"; x[6] = "a";
を用います。
x[2] = undefined; を記述しないと undefined になります。
また、次のように記述できます。
x = ["", null, , NaN, 0, "5", "a"];
このとき、「,」だけの項は undefined になります。
また、x[2] = ; とすると文法エラーになります。
これらの違いを理解していないと、思わぬトラブルが発生します。
x が "" であるかを判別するには、if (x == "") のようにすればよいように思いますが、下表のように x=0 も含まれてしまいます。また、Javascript には isMaN(x) や typeof などの関数があります。しかし、次のように、単純にはいかないのです。
例えば、x が ””であり、null や undefined などではないことを判別するには、次の「条件」に示すような記述が必要になります。
上の「条件」をまとめて関数にしたのが checkType() です。 checkType()を用いたいくつかの例を表示します。
をクリックしてください。変化はありませんが後述の表の作成に必要です、
変数のタイプには、数値、文字列、""、null、undefined などがあります。
それらを単純に大小比較すると、次の表のようになります。
x,y の軸の空白は "" です。★は大小の比較ができないという意味です。
任意の2変数の比較をする場合、それらのタイプが不明なことがあります。特に配列のソートなどをするときには特殊タイプとの比較、文字列と数値との比較が発生することがあります。そのとき、★の組み合わせになり、処理が異常終了するのが不都合なこともあります。
それを避けるために 関数 compareType() を作成しました。
オプションを省略あるいは"bottom" のときは
(小)数値<文字列<""<null<undefined(大)
"top" のときは.
(小)undefined<null<""<数値<文字列(大)
の大小関係になります。
戻り値は ">", "=", "<" のいずれかになります。
一般形は functionLiteral(関数名[, 引数1, 引数2, ・・・]); (引数個数≦10)です。
関数名(引数1, 引数2, ・・・) と同じことになります。
<script> function functionLiteral0(){ document.getElementById("functionLiteral結果表示場所").innerHTML = "functionLiteral0"; } function functionLiteral2(引数1, 引数2){ document.getElementById("functionLiteral結果表示場所").innerHTML = "functionLiteral2:引数1=" + 引数1 + ", 引数2=" + 引数2; } </script> <button onClick="functionLiteral('functionLiteral2',100,'aaa')">実行</button> <div id="functionLiteral結果表示場所"></div> </script>
引数なし
2個の引数
「可変個引数」、 「リンク:location.hrefとwindow.open」
一覧表の左側に標準16色と原色の透明度別の色、右側にはセーフカラーの透明度1の色が掲げられています。
色セルをクリックすると、左下に、その色の拡大図と rgba形式名称が表示されます。
実際のソースコードには、getColor の直後にある付帯関数 getColorClick(), getColorChange() が必要になります。
操作方法などは getColor.htmlを参照してください。