BresenhamLine(x0, y0, x1, y1) {
let x, y, dx, dy, dy_2, dx_2, e, e1, k = 0;
k = (y1 - y0) / (x1 - x0);
e = e1; e1 = e;
dy_2 = dx_2;
dx_2 = dy_2;
dx = x1 - x0; dy = y1 - y0; e = -dx; e1 = -dy;
x = x0;
y = y0;
dy_2 = 2 * dy;
dx_2 = 2 * dx;
let numPoint = 0;
if (math.abs(k) < 1) { numPoint = math.abs(dx) + 1; }
else { numPoint = math.abs(dy) + 1; }
let pointMatrix = new Array(numPoint);
for (let i = 0; i < pointMatrix.length; i++) {
pointMatrix[i] = new Array(2);
}
pointMatrix[0][0] = x0;
pointMatrix[0][1] = y0;
if (x0 === x1) {
if (y1 < y0) {
for (var i = 1; i <= math.abs(dy); i++) {
y--;
pointMatrix[i][0] = x;
pointMatrix[i][1] = y;
}
} else {
for (var i = 1; i <= dy; i++) {
y++;
pointMatrix[i][0] = x;
pointMatrix[i][1] = y;
}
}
}
if (y0 === y1) {
if (x1 >= x0) {
for (var i = 1; i <= dx; i++) {
x++;
pointMatrix[i][0] = x;
pointMatrix[i][1] = y;
}
}
if (x1 < x0) {
for (var i = 1; i <= Math.abs(dx); i++) {
x--;
pointMatrix[i][0] = x;
pointMatrix[i][1] = y;
}
}
}
// first part begin --- x1 > 0 && abs(k) > 1
if (x1 > x0) {
if (Math.abs(k) <= 1 && Math.abs(k) != 0) {
if (k >= 0) {
for (var i = 1; i <= dx; i++) {
x++; e = e + dy_2;
if (e >= 0) {
y++; e = e - dx_2;
}
pointMatrix[i][0] = x;
pointMatrix[i][1] = y;
}
} else if (k >= -1) {
e = -e;
for (var i = 1; i <= dx; i++) {
x++; e = e + dy_2;
if (e <= 0) {
y--; e = e + dx_2;
} pointMatrix[i][0] = x;
pointMatrix[i][1] = y;
}
}
}// first part end
// second part begin --- x1 > 0 && abs(k) > 1
else {
if (k > 0) {
for (var i = 1; i <= dy; i++) {
y++; e1 = e1 + dx_2;
if (e1 >= 0) {
x++; e1 = e1 - dy_2;
}
pointMatrix[i][0] = x;
pointMatrix[i][1] = y;
}
}
else {
e1 = -e1;
for (var i = 1; i <= math.abs(dy); i++) {
y--; e1 = e1 + dx_2;
if (e1 > 0) {
x++; e1 = e1 + dy_2;
}
pointMatrix[i][0] = x;
pointMatrix[i][1] = y;
}
}
}
}// second part end
// third part begin x1 < x0
if (x1 < x0) {
if (Math.abs(k) < 1 && Math.abs(k) != 0) {
if (k < 0) {
e = -e;
for (var i = 1; i <= Math.abs(dx); i++) {
x--; e = e + dy_2;
if (e >= 0) {
y++; e = e + dx_2;
}
pointMatrix[i][0] = x;
pointMatrix[i][1] = y; }
}
else {
e = -e;
for (var i = 1; i <= Math.abs(dx); i++) {
x--; e = e - dy_2;
if (e >= 0) {
y--; e = e + dx_2;
}
pointMatrix[i][0] = x;
pointMatrix[i][1] = y;
}
}
}//third part end
// fourth part begin k >1
else {
if (k < 0) {
// e1 = -e1;
for (var i = 1; i <= dy; i++) {
y++; e1 = e1 - dx_2;
if (e1 >= 0) {
x--; e1 = e1 - dy_2;
}
pointMatrix[i][0] = x;
pointMatrix[i][1] = y;
}
} else {
e1 = e1;
for (var i = 1; i <= math.abs(dy); i++) {
y--; e1 = e1 - dx_2;
if (e1 >= 0) {
x--; e1 = e1 + dy_2;
}
pointMatrix[i][0] = x;
pointMatrix[i][1] = y;
}
}
}
}
return pointMatrix;
}
浙公网安备 33010602011771号