2012-11-21 118 views
5

我想在一條直線上獲得2個給定點之間的所有x,y座標。雖然這看起來像是一件容易的事,但似乎無法擺脫困境。獲取2個點之間的所有像素座標

所以,例如:

  • 點1:(10,5)
  • 點2:(15,90)
+0

剛纔他們在學校教我關於Sine,Cosine和Tangent。 http://www.mathsisfun.com/sine-cosine-tangent.html –

+1

Dupe - 請參閱:http://stackoverflow.com/questions/4672279/bresenham-algorithm-in-javascript –

+5

你正在尋找http:///en.wikipedia.org/wiki/Bresenham%27s_line_algorithm – Alnitak

回答

1

鑑於點A(10,5)和B(15,90)和C(X,Y)在AB,我們有:

(x - 10)/(y - 5) = (15 - 10)/(90 - 5) 

你可以做的是迭代從x = 10至x = 15,並計算對應的y。由於x和y是整數,所以有時候必須舍入結果(或跳過它)。

9

編輯:下面的解決方案僅適用於幾何角度。在屏幕上繪圖與理論幾何圖形不同,您應該聽取建議Bresenham算法的人員。


考慮,兩個點,並且知道該行的公式爲y = m*x + b,其中m是斜率和b的攔截,就可以計算出mb,然後公式適用於X軸的所有值在你的A和B點之間:

var A = [10, 5]; 
var B = [15, 90]; 

function slope(a, b) { 
    if (a[0] == b[0]) { 
     return null; 
    } 

    return (b[1] - a[1])/(b[0] - a[0]); 
} 

function intercept(point, slope) { 
    if (slope === null) { 
     // vertical line 
     return point[0]; 
    } 

    return point[1] - slope * point[0]; 
} 

var m = slope(A, B); 
var b = intercept(A, m); 

var coordinates = []; 
for (var x = A[0]; x <= B[0]; x++) { 
    var y = m * x + b; 
    coordinates.push([x, y]); 
} 

console.log(coordinates); // [[10, 5], [11, 22], [12, 39], [13, 56], [14, 73], [15, 90]]