六帖のかたすみ

DVを受けていた男性。家を脱出して二周目の人生を生きています。自閉症スペクトラム(受動型)です。http://rokujo.org/ に引っ越しました。

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程度まで減った。いやーー楽だ。