gpt4 book ai didi

javascript - 用
填充 2 点之间的间隙

转载 作者:太空狗 更新时间:2023-10-29 16:42:55 25 4
gpt4 key购买 nike

我今天做了一个实验,看看我能用 <div> 做什么秒。所以我做了a simple Paint-like program , 你可以用 <div> 绘制

$(window).mousemove(function(e){
if(!mousedown){
return false;
}
var x = e.clientX,
y = e.clientY;

drawDot(x,y,ele);

lastX = x;
lastY = y;
});

这是代码的一部分。它有效,但点之间有间隙。所以我创建了一个名为 fillDot 的函数将从 A 点(最后一点)到 B 点(当前点)画一条线。

drawDot(x,y,ele);

fillDot(lastX,lastY,x,y,ele);
function fillDot(lx,ly,x,y,canvas){
var rise = y - ly,
run = x - lx,
slope = rise / run,
yInt = y - (slope * x);
if( lx < x ){
for(var i = lx; i < x ; i+=.5){
var y = slope * i + yInt;
drawDot(i,y,canvas);
}
}else if( x < lx ){
for(var i = x; i < lx ; i++){
var y = slope * i + yInt;
drawDot(i,y,canvas);
}
}
}

仅当我绘制水平线时它才能正常工作。当我从上到下或从下到上绘制时,仍然会有间隙。我找到了一个叫做 Bresenham's line algorithm 的东西它可以做同样的事情,但我不知道如何使用它...

知道如何填充中间的所有点吗?

ps:我知道有<canvas> ,但我正在测试我可以用 <div> 做什么.

最佳答案

没关系,我将 Bresenham 的线算法翻译成 JavaScript,它现在可以完美运行了!

function fillDot(x0, y0, x1, y1){
var dx = Math.abs(x1-x0);
var dy = Math.abs(y1-y0);
var sx = (x0 < x1) ? 1 : -1;
var sy = (y0 < y1) ? 1 : -1;
var err = dx-dy;

while(true){

drawDot(x0,y0);

if ((x0==x1) && (y0==y1)) break;
var e2 = 2*err;
if (e2>-dy){
err -= dy;
x0 += sx;
}
if (e2 < dx){
err += dx;
y0 += sy;
}
}
}

关于javascript - 用 <div> 填充 2 点之间的间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11786768/

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