рони,
Вот тебе функция: //<canvas id="canvas" width="300" height="300" style="border: 1px solid #000"></canvas> function setPixel (x, y) { ctx.beginPath(); ctx.moveTo(x,y); ctx.arc(x, y, 1, 0, Math.PI*2, true); ctx.fill(); ctx.closePath(); } var canvas = document.getElementById('canvas'), ctx = canvas.getContext('2d'); ctx.fillStyle = 'rgba(0,0,0,1)'; Можешь нарисовать на канвас то, что у тебя получилось? Я не очень понимаю куда мне подставлять отрицательные значения из твоего кода. Вот координаты двух линий: x1 = 10, y1 = 10, x2 = 100, y2 = 100; x1 = 10, y1 = 100, x2 = 100 y2 = 10; |
Цитата:
function drawLineTo(x1, y1, x2, y2) { var deltaX = Math.abs(x2 - x1), deltaY = Math.abs(y2 - y1), signX = x1 < x2 ? 1 : -1, signY = y1 < y2 ? 1 : -1, error = deltaX - deltaY; setPixel(x2, y2); while (x1 != x2 || y1 != y2) { setPixel(x1, y1); var error2 = error * 2; if (error2 > -deltaY) { error -= deltaY; x1 += signX; } if (error2 < deltaX) { error += deltaX; y1 += signY; } } } |
Цитата:
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> </head> <body> <canvas id="canvas" width="300" height="300" style="border: 1px solid #000"></canvas> <script> function setPixel (x, y) { ctx.beginPath(); ctx.moveTo(x,y); ctx.arc(x, y, 1, 0, Math.PI*2, true); ctx.fill(); ctx.closePath(); } var canvas = document.getElementById('canvas'), ctx = canvas.getContext('2d'); ctx.fillStyle = 'rgba(0,0,0,1)'; x1 = 10, y1 = 10, x2 = 100, y2 = 100; var time = Math.abs(x1 - x2); for (var i=0; i<time; i++) { var delta = i/time ; var a = delta*(x2 - x1) + x1; var b = delta*(y2 - y1) + y1; setPixel(a,b) } x1 = 10, y1 = 100, x2 = 100, y2 = 10; var time = Math.abs(x1 - x2); for (var i=0; i<time; i++) { var delta = i/time ; var a = delta*(x2 - x1) + x1; var b = delta*(y2 - y1) + y1; setPixel(a,b) } </script> </body> </html> |
JsLoveR,
Спасибо. Я нашел немного другой, он по скорости чуть чуть быстрее: function setLine (x1, y1, x2, y2) { var x = x1, y = y1; var dx = Math.abs(x2-x1), dy = Math.abs(y2-y1); var sx = (x2-x1)>0?1:((x2-x1)==0?0:-1); var sy = (y2-y1)>0?1:((y2-y1)==0?0:-1); var tx, ty; var z, scount, count, dcount; if (dx>=dy) { tx = sx; ty = 0; } else { z=dx; dx=dy; dy=z; tx=0; ty=sy; } scount = 2*dy; count = scount-dx; dcount = count-dx; for(;;) { dx -= 1; if (dx < -1){ break; } setPixel(x, y); if (count >= 0) { x+=sx; y+=sy; count += dcount; } else { x+=tx; y+=ty; count += scount; } } } |
Цитата:
эт на будущее, по скольку спускаемся на уровень абстракции ниже ближе к железу, то это раз в сто быстрее чем яваскриптом считать Этим же трюком можно чекать пересекаются ли фигуры в физических яваскрипт движках) аппаратное ускорение хули |
for(;;) не пиши так больше, пиши while(true) как все нормальные люди, и даже не while(1), именно while(true), как взрослый образованный человек, не дикарь. |
рони,
Что-то не работает: <!DOCTYPE HTML> <html> <head> <title>Untitled</title> </head> <body> <canvas id="canvas" width="1000" height="1000" style="border: 1px solid #000"></canvas> <script> function setPixel (x, y) { ctx.beginPath(); ctx.moveTo(x,y); ctx.arc(x, y, 1, 0, Math.PI*2, true); ctx.fill(); ctx.closePath(); } var canvas = document.getElementById('canvas'), ctx = canvas.getContext('2d'); ctx.fillStyle = 'rgba(0,0,0,1)'; function ronyLine (x1, y1, x2, y2) { var time = Math.abs(x1 - x2), a, b, delta, i; for (i=0; i<time; i++) { delta = i/time; a = delta*(x2 - x1) + x1; b = delta*(y2 - y1) + y1; setPixel(a,b) } } for(var i=0;i<1000;i+=1) { ronyLine(10, 10, i, 200); } </script> </body> </html> Упс, работает, но что-то мне подсказывает, что лучше так не делать :) |
__он_самый__,
Цитата:
|
Gozar,
28 строка зачем? |
Цитата:
|
Часовой пояс GMT +3, время: 08:08. |