XY軸

kickzone/SHChart · GitHub

まだ見栄えが良くないけれど一応XY軸を作成することができた。来週はマウスに対応した情報を表示する処理を作業する。作業中、日曜日なのに仕事の依頼が入ってきたので、時間が少なくしか取れなかった。
見返してみると月が1か月ずれている、、あ、そういえば、javascriptのDate.getMonth()って1か月ずれてるんだった!Date.prototype.getMonth() – JavaScript | MDN 1月は0、2月は1なのね。修正はまた来週。
一番面倒だったのは、XY軸の目盛の間隔の自動決定方法。Y軸に関するコードを参考に載せておきます。

    /**
    Y軸目盛の目安本数
    */
private YAXIS_BASE_NUM: number = 4;
/**
    目盛に使用する数値一覧を算出
    */
private DecideScale(min: number, max: number): Array<number> {
//数値の幅を目安本数で割って、大体の間隔を算出
var range: number = max - min;
var intervalBase: number = range / this.YAXIS_BASE_NUM;
//キリのいい数に揃える 22→20、158→200など
var keta: number = Math.floor(Math.log(intervalBase) / Math.log(10) + 1);
var interval: number = Math.round(intervalBase / Math.pow(10, keta - 1)) * Math.pow(10, keta - 1);
//intervalで割り切れる数を返す
var minBase = Math.ceil(min / interval);
var maxBase = Math.floor(max / interval);
var ret: Array<number> = [];
for (var i: number = minBase; i <= maxBase; i++) {
ret.push(i * interval);
}
return ret;
}

繰り返しになるけどTypeScriptでは原理的に実行時エラーが発生しない。これはすごい。少し型を意識してプログラミングするだけで、デバッグの手間が1/10程度まで減った。いやーー楽だ。