javascript - 用 <div> 填充 2 点之间的间隙

标签 javascript html

我今天做了一个实验,看看我能用 <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/

相关文章:

javascript - camanjs 裁剪,结果渲染到 <img> 元素而不是 Canvas

javascript - 使用 dojo.xhrget() 方法在 Dojogrid 中显示数据

javascript - 实现 Jquery slider

html - 打印时 CSS 列中断

javascript - 移相器 : Key Down + Collision Kill

javascript - 缩小删除日期但保留时间

javascript - 用空格替换符号 jquery/js

javascript - 需要 HTML5 输入,在提交时滚动到带有固定导航栏的输入

html 表单的 Javascript 验证不起作用

javascript - 当用户滚动离开时如何从 URL 中剥离散列片段?