我希望在一条直线上得到2个给定点之间的所有x,y坐标。 虽然这看起来很容易,但我似乎无法理解它。
所以,例如:
答案 0 :(得分:9)
编辑:以下解决方案仅适用于几何角度。在屏幕上绘图与理论几何不同,你应该倾听那些暗示Bresenham算法的人。
给出两点,并且知道线的方程是y = m*x + b
,其中m
是斜率,b
截距,你可以计算m
和{{ 1}}然后将公式应用于A点和B点之间的X轴的所有值:
b
答案 1 :(得分:1)
鉴于AB中的A(10,5)和B(15,90)以及C(x,y),我们有:
(x - 10) / (y - 5) = (15 - 10) / (90 - 5)
你可以做的是从x = 10迭代到x = 15并计算相应的y。由于x和y是整数,有时你必须对结果进行舍入(或跳过它)。
答案 2 :(得分:0)
基于wiki文章,这里是我的JS代码,它处理高线和低线:
const drawLine = (x0, y0, x1, y1) => {
const lineLow = (x0, y0, x1, y1) => {
const dx = x1 - x0
let dy = y1 - y0
let yi = 1
if (dy < 0) {
yi = -1
dy = -dy
}
let D = 2 * dy - dx
let y = y0
for (let x = x0; x < x1; x++) {
drawPoint(x, y)
if (D > 0) {
y = y + yi
D = D - 2 * dx
}
D = D + 2 * dy
}
}
const lineHigh = (x0, y0, x1, y1) => {
let dx = x1 - x0
const dy = y1 - y0
let xi = 1
if (dx < 0) {
xi = -1
dx = -dx
}
let D = 2 * dx - dy
let x = x0
for (let y = y0; y < y1; y++) {
drawPoint(x, y)
if (D > 0) {
x = x + xi
D = D - 2 * dy
}
D = D + 2 * dx
}
}
const { abs } = Math
if (abs(y1 - y0) < abs(x1 - x0)) {
if (x0 > x1) {
lineLow(x1, y1, x0, y0)
} else {
lineLow(x0, y0, x1, y1)
}
} else {
if (y0 > y1) {
lineHigh(x1, y1, x0, y0)
} else {
lineHigh(x0, y0, x1, y1)
}
}
}
答案 3 :(得分:-1)
您可以获取两点之间的所有坐标,例如
Get_coordinates_between_two_points(data){
var coordinates = [];
for (var y = data.start_y; y < data.end_y; ++y) {
for (var x = data.start_x; x < data.end_x; ++x) {
coordinates.push({x:x, y:y});
}
}
return coordinates;
}
Get_coordinates_between_two_points({start_x:10,start_y:5,end_x:15,end_y:90});