visualized K-means

k-means可視化

by s_yoshiki

HTML

<div id="msg">

</div>
<br>
<div id="content">
    <canvas id="canvas" width="512" height="512"></canvas>
</div>
<hr>

<table>
    <tr>
        <td>クラスタ数 </td>
        <td><input type="text" value="9" id="claster"></td>
    </tr>
    <tr>
        <td>ノード数 </td>
        <td><input type="text" value="600" id="node"></td>
    </tr>
    <tr>
        <td>アニメーションフレーム </td>
        <td><input type="text" value="50" id="frame"></td>
    </tr>
</table>

JavaScript

(function(){
    
    //クラスタ数
    var classNode = 9;
    //次元数
    var dim = 2;
    var animationFrame = 10;
    var textArrayMax = 5300;
    
    var range = 512;
    
    //point matrix
    var ptnMap = initMat(dim,textArrayMax); 
    var ptnMapBuffer = new Array(textArrayMax) ;
    var grvArr = initMat(dim,classNode); //nodeの重心
    var grvArrColor = initMat(3,classNode,0,255); //nodeの重心
    
    main();
    //btn.addEventListener("click",function(){});
    
    function init(){
        classNode = parseInt(document.getElementById("claster").value,10);
        textArrayMax= parseInt(document.getElementById("node").value,10);
        animationFrame = parseInt(document.getElementById("frame").value,10);
    }
    
    function main(){
        init()
        
        ptnMap = initMat(dim,textArrayMax); 
        ptnMapBuffer = new Array(textArrayMax) ;
        grvArr = initMat(dim,classNode); 
        grvArrColor = initMat(3,classNode,0,255);
        
        var count = 0;
        try{
            logic();
            document.getElementById("msg").innerHTML= "";
        }catch(e){
            document.getElementById("msg").innerHTML= e;
            setTimeout(main, animationFrame);
        }
        
        function logic(){
            clearCanvas();
            //showPoints(ptnMap,3,"rgb(0,0,0)");
            var buffer = JSON.stringify(grvArr);
            calcClaster();
            var result = JSON.stringify(grvArr);
            //showPoints(grvArr,10,"rgb(255,0,0)");
            for(var i=0;i<grvArr.length;i++){
                drawPoint(grvArr[i],7,vec2rgb(grvArrColor[i],true));
                //drawPoint(grvArr[i],7,"rgb(255,0,0)");
            }
            if(buffer === result){
                //showPoints(grvArr,10,"rgb(255,0,0)");
                setTimeout(main, animationFrame);
                return;
            }
            count++;
            setTimeout(logic, animationFrame);
        }
    }
    function calcClaster(){
        //配列初期化
     ...