-
Notifications
You must be signed in to change notification settings - Fork 0
/
sample3_MathWrapper.html
130 lines (125 loc) · 4.92 KB
/
sample3_MathWrapper.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<!DOCTYPE html>
<html lang="ja">
<!--
Copyright (C) 2020 浦 公統
Released under the MIT license.
see https://opensource.org/licenses/MIT/
-->
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<title>MathWrapper のサンプル</title>
<style>
table, th, td
{
border: solid 2px;
}
</style>
<script src="./lib/anyCalculatorFramework.js"></script>
<script src="./lib/formatDecimal.js"></script>
<script src="./lib/MathWrapper.js"></script>
<script>
/**
* 初期化
*/
function init()
{
// 入力項目
// 項目名, 入力項目ID, 単位 (省略時は空), 初期値 (省略時は空), 省略可否フラグ (省略時は false)
// 入力項目IDは1個の計算機アプリ内で同じものを重複して使うことはできません
var inputs = [
new itemInput( 'x', 'x' ),
new itemInput( 'y', 'y' ),
new itemInput( 'z', 'z' )
];
// 出力項目
// 項目名, 出力項目ID, 単位 (省略時は空), 小数点以下桁数 (数値ではなく、文字列を出力する場合は -1) (省略時は 3)
// 出力項目IDは1個の計算機アプリ内で同じものを重複して使うことはできません
var outputs = [
new itemOutput( 'abs(x)', 'abs' ),
new itemOutput( 'max(x, y, z)', 'max' ),
new itemOutput( 'min(x, y, z)', 'min' ),
new itemOutput( 'sin(x)', 'sin' ),
new itemOutput( 'cos(x)', 'cos' ),
new itemOutput( 'tan(x)', 'tan' ),
new itemOutput( 'asin(x)', 'asin' ),
new itemOutput( 'acos(x)', 'acos' ),
new itemOutput( 'atan(x)', 'atan' ),
new itemOutput( 'atan2(y, x)', 'atan2' ),
new itemOutput( 'sinh(x)', 'sinh' ),
new itemOutput( 'cosh(x)', 'cosh' ),
new itemOutput( 'tanh(x)', 'tanh' ),
new itemOutput( 'ceil(x)', 'ceil' ),
new itemOutput( 'floor(x)', 'floor' ),
new itemOutput( 'trunc(x)', 'trunc' ),
new itemOutput( 'sqrt(x)', 'sqrt' ),
new itemOutput( 'cbrt(x)', 'cbrt' ),
new itemOutput( 'hypot(x, y, z)', 'hypot' ),
new itemOutput( 'pow(x, y)', 'pow' ),
new itemOutput( 'exp(x)', 'exp' ),
new itemOutput( 'log(x)', 'log' ),
new itemOutput( 'ln(x)', 'ln' ),
new itemOutput( 'log10(x)', 'log10' ),
new itemOutput( 'log2(x)', 'log2' )
];
// 計算機アプリのインスタンス生成
// 計算機アプリのID, 入力項目, 出力項目, 計算ボタンのキャプション, 計算コールバック関数, 入力エラーコールバック関数, テキストサイズ (省略時は4)
new anyCalculator( 'calculator', inputs, outputs, '計算', calc, onError );
}
/**
* 計算関数
* @param inputs 入力項目
* @param outputs 出力項目
* @note inputs[ '項目名' ] に入力数値が入る (数値が入力されてない項目には NaN が入る)
* outputs[ '項目名' ] に計算結果を入れて関数を終了すること
*/
function calc( inputs, outputs )
{
outputs[ 'abs' ] = abs( inputs[ 'x' ] );
outputs[ 'max' ] = max( inputs[ 'x' ], inputs[ 'y' ], inputs[ 'z' ] );
outputs[ 'min' ] = min( inputs[ 'x' ], inputs[ 'y' ], inputs[ 'z' ] );
outputs[ 'sin' ] = sin( inputs[ 'x' ] );
outputs[ 'cos' ] = cos( inputs[ 'x' ] );
outputs[ 'tan' ] = tan( inputs[ 'x' ] );
outputs[ 'asin' ] = asin( inputs[ 'x' ] );
outputs[ 'acos' ] = acos( inputs[ 'x' ] );
outputs[ 'atan' ] = atan( inputs[ 'x' ] );
outputs[ 'atan2' ] = atan2( inputs[ 'y' ], inputs[ 'x' ] );
outputs[ 'sinh' ] = sinh( inputs[ 'x' ] );
outputs[ 'cosh' ] = cosh( inputs[ 'x' ] );
outputs[ 'tanh' ] = tanh( inputs[ 'x' ] );
outputs[ 'ceil' ] = ceil( inputs[ 'x' ] );
outputs[ 'floor' ] = floor( inputs[ 'x' ] );
outputs[ 'trunc' ] = trunc( inputs[ 'x' ] );
outputs[ 'sqrt' ] = sqrt( inputs[ 'x' ] );
outputs[ 'cbrt' ] = cbrt( inputs[ 'x' ] );
outputs[ 'hypot' ] = hypot( inputs[ 'x' ], inputs[ 'y' ], inputs[ 'z' ] );
outputs[ 'pow' ] = pow( inputs[ 'x' ], inputs[ 'y' ] );
outputs[ 'exp' ] = exp( inputs[ 'x' ] );
outputs[ 'log' ] = log( inputs[ 'x' ] );
outputs[ 'ln' ] = ln( inputs[ 'x' ] );
outputs[ 'log10' ] = log10( inputs[ 'x' ] );
outputs[ 'log2' ] = log2( inputs[ 'x' ] );
}
/**
* 入力エラーコールバック関数
* @param item 入力エラー項目の itemInput オブジェクト
* item.title 項目名
* item.id ID
* item.unit 単位
* item.initValue 初期値
* item.element input 要素
*/
function onError( item )
{
alert( item.title + 'に数値を入力してください' );
item.element.focus();
}
</script>
</head>
<body onload="init();">
<!-- 計算機アプリはこの table に表示されます --->
<!-- この table の id と new anyCalculator() の第1引数に、計算機アプリのIDを指定します -->
<table id="calculator"></table>
</body>
</html>