如何插入x:0 y:0和x:14 y:9兩個點並更改直線之間所有單元格之間的背景?並保持它相對於表的寬度和高度?在兩個位置之間繪製單元格
填充表格的示例:所以我想直接連接從x:0y:0到x:14 y:9的紅色塊。 http://jsfiddle.net/qy09q4jv/8/
var table = $('<table>');
$('body').append(table);
var mx = 15;
var my = 10;
for(y = 0; y < my; y++){
var tr = $('<tr>');
for(x = 0; x < mx; x++){
var td = $('<td>');
td.attr('id', 'cell-'+x+'-'+y);
td.html("X:"+x + "Y:"+y);
tr.append(td);
}
$(table).append(tr);
}
這是我得到的那一刻:
<html>
<head>
<title>Test</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
</head>
<style>
table td{
border: 1px solid black;
background-color: #C8C8C8;
}
</style>
<body>
<ul>
</ul>
<script>
var table = $('<table>');
$('body').append(table);
var mx = 20;
var my = 20
for(y = 0; y < my; y++){
var tr = $('<tr>');
for(x = 0; x < mx; x++){
var td = $('<td>');
td.attr('id', 'cell-'+x+'-'+y);
td.html("X:"+x + "Y:"+y);
tr.append(td);
}
$(table).append(tr);
}
var startX = 0;
var startY = 0;
var endX = 14;
var endY = 9;
$("#cell-"+startX+"-"+startY).css('background-color', 'red');
$("#cell-"+endX+"-"+endY).css('background-color', 'red');
var distance = distance({x: startX, y: startY}, {x: endX, y: endY});
line(startX, startY, endX, endY);
function line(x0, y0, x1, y1) { //http://rosettacode.org/wiki/Bitmap/Bresenham%27s_line_algorithm#JavaScript
var dx = Math.abs(x1 - x0), sx = x0 < x1 ? 1 : -1;
var dy = Math.abs(y1 - y0), sy = y0 < y1 ? 1 : -1;
var err = (dx>dy ? dx : -dy)/2;
while (true) {
$("#cell-"+x0+"-"+x0).css('background-color', 'red');
if (x0 === x1 && y0 === y1) break;
var e2 = err;
if (e2 > -dx) { err -= dy; x0 += sx; }
if (e2 < dy) { err += dx; y0 += sy; }
}
}
</script>
</body>
</html>
而我又卡住:(
你想改變所有的細胞含有X的背景,Y必要時兩個給定的點圓結果之間的協調? – albciff 2014-09-03 09:56:05
所以我要試試這個https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm – 2014-09-03 10:34:55
是的,我認爲你必須使用Bresenham的算法。我發佈了一個答案,希望它有幫助。 – albciff 2014-09-03 11:02:39