凸包 - ギフト包装法
凸包 - ギフト包装法
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)")
}...