凸包 - グラハムスキャン
凸包 - グラハムスキャン
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 path = []
var k = 0
init()
var ptnMap = []
try{
logic();
}catch(e){
document.getElementById("msg").innerHTML= e;
}
function logic(){
//init
clearCanvas()
if (status === 0) {
ptnMap = initMat(dim,textArrayMax)
init()
status++
} else if (status === 1) {
var minPoints = 255
var minIndex = 0
for (var i = 1;i <= count; i++) {
drawLine(ptnMap[i], ptnMap[i-1], 3, "rgb(193,1,0)")
if (ptnMap[i][0] < minPoints) {
minPoints = ptnMap[i][0]
minIndex = i
}
}
drawPoint(ptnMap[minIndex], 8, "rgb(20,90,200)")
count++
if (ptnMap.length === count) {
count = 0
status++
}
} else if (status === 2) {
ptnMap = sortMat(ptnMap, 0)
for (var i = 1;i <= count; i++) {
drawLine(ptnMap[0], ptnMap[i], 3, "rgb(193,1,0)")
}
drawPoint(ptnMap[0], 8, "rgb(20,90,200)")
drawPoint(ptnMap[count], 8, "rgb(20,90,200)")
count++
if (ptnMap.length === count) {
count = 0
status++
...