获取2点之间的所有像素坐标

时间:2012-11-21 10:52:53

标签: javascript math canvas html5-canvas

我希望在一条直线上得到2个给定点之间的所有x,y坐标。 虽然这看起来很容易,但我似乎无法理解它。

所以,例如:

  • 第1点:(10,5)
  • 第2点:(15,90)

4 个答案:

答案 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});