凸包 - ギフト包装法

凸包 - ギフト包装法

by s_yoshiki

HTML

<div id="msg">

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

<table>
    <tr>
        <td>要素数 </td>
        <td><input type="text" value="20" id="node"></td>
    </tr>
    <tr>
        <td>アニメーションフレーム </td>
        <td><input type="text" value="150" id="frame"></td>
    </tr>
</table>

JavaScript

(function(){
    
    //次元数
    var dim = 2;
    var animationFrame = 10;
    var textArrayMax = 5300;
    var range = 512;
    var ptnMap = []
    var classNode = 1
    
    main();
    
    function init(){
        textArrayMax= parseInt(document.getElementById("node").value,10);
        animationFrame = parseInt(document.getElementById("frame").value,10);
    }
    
    function main(){
	    var status = 0
        var count = 0
        var paths = []
        
    	init()
        
        //var ptnMap = initMat(dim,textArrayMax)
		//ptnMap = sortMat(ptnMap, 0)
        var ptnMap = []
        
		try{
            logic();
        }catch(e){
            document.getElementById("msg").innerHTML= e;
        }
        
        function logic(){
            clearCanvas()
            
            if (status === 0) {
            	init()
            	ptnMap = initMat(dim,textArrayMax)
                ptnMap = sortMat(ptnMap, 0)
            	paths = []
                count = 0
            	status++
            
            } else if (status === 1) {
                var s = getLargestVectorIndex(ptnMap[0], ptnMap)
                var n = getLargestThetaIndex(ptnMap[0], ptnMap[s], ptnMap)
                paths.push(s)
                paths.push(n)
                status ++
                
                drawPoint(ptnMap[n], 10, "rgb(0,0,0)")
                drawLine(ptnMap[n], ptnMap[s], 3, "rgb(123,111,0)")
                
            } else if (status == 2) {
            	var current = paths[paths.length - 1]
                var befor = paths[paths.length - 2]
                var next = getLargestThetaIndex(ptnMap[befor], ptnMap[current], ptnMap)
                
                if (next === paths[0]) {
                	status = 4
                    drawPoint(ptnMap[next], 10, "rgb(0,250,0)")
                    drawLine(ptnMap[next], ptnMap[current], 3, "rgb(123,111,0)")
                    showPoints(ptnMap,3,"rgb(0,0,0)")
                    
                }...