我正在准备面试,我认为他们可以要求我修改我编写的用于处理对角线绘制的应用。
简单的程序可以在终端中绘制画布,然后在其中添加形状。
将创建以下C 20 4
:
----------------------
| |
| |
| |
| |
----------------------
现在,我正在尝试处理对角线,以使L 2 1 11 4
(这两个点分别表示为x1,y1,x2,y2)产生:
----------------------
| x |
| x |
| x |
| x |
----------------------
至少我认为应该是这样。我从这里尝试了两个答案:Bresenham algorithm in Javascript
所以apply
函数看起来像这样:
apply(canvas) {
const dx = Math.abs(this.x2 - this.x1);
const dy = Math.abs(this.y2 - this.y1);
const sx = (this.x1 < this.x2) ? 1 : -1;
const sy = (this.y1 < this.y2) ? 1 : -1;
let err = dx - dy;
let x1 = this.x1;
let y1 = this.y1;
let x2 = this.x2;
let y2 = this.y2;
canvas.pixels[y1][x1] = 'x';
while(true) {
canvas.pixels[y1][x1] = 'x';
if ((x1 === x2) && (y1 === y2)) break;
const e2 = 2 * err;
if (e2 > -dy) { err -= dy; x1 += sx; }
if (e2 < dx) { err += dx; y1 += sy; }
}
}
但是我得到的是x上的迭代次数太多,所以行太粗了:
----------------------
| xx |
| xxx |
| xxx |
| xx |
----------------------
这是一个可运行的演示:https://repl.it/@DominicTobias/Bresenhams-line-algo
输入C 20 4
,按Enter,然后按L 2 1 11 4
。
任何帮助表示赞赏!