gpt4 book ai didi

javascript - 在两个位置之间绘制单元格

转载 作者:行者123 更新时间:2023-11-28 07:59:08 25 4
gpt4 key购买 nike

如何插入两个点,例如 x:0 y:0 和 x:14 y:9 并更改直线上这些点之间的所有单元格的背景?并保持它相对于表格的宽度和高度?

填充表格的示例:所以我想以直线连接从 x:0y:0 到 x:14 y:9 的红色 block 。 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>

我又陷入困境了:(

最佳答案

您必须使用Bresenham's line alogrithm

尝试使用此代码或此 jsfiddle

        var a = [0,0];
var b = [14,9];
// coordinates between two points
var coordinates = [];
var deltax = b[0] - a[0];
var deltay = b[1] - a[1];
var y = a[1];
var error = 0;
var deltaError = Math.abs(deltay/deltax);
// x axis
for(var x = a[0]; x <= b[0]; x++){
coordinates.push([x,y]);
error = error + deltaError;
if(error >= 0.5){
y = y + 1
error = error - 1;
}
}


var containsCoordinate = (function (coordArray) {
return function (x,y) {
for (var i = 0; i < coordArray.length; i++) {
if (coordArray[i][0] == x && coordArray[i][1] == y) {
return true;
}
}
return false;
}
})(coordinates);


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);
if(containsCoordinate(x,y)){
td.css("background-color","yellow");
}
tr.append(td);
}

$(table).append(tr);
}

希望这有帮助,

关于javascript - 在两个位置之间绘制单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25641079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com