2012-11-21 41 views
5

Tôi muốn nhận tất cả tọa độ x, y giữa 2 điểm cho trước, trên một đường thẳng. Trong khi điều này có vẻ như một nhiệm vụ dễ dàng như vậy, tôi không thể có vẻ để có được đầu của tôi xung quanh nó.Nhận tất cả tọa độ pixel giữa 2 điểm

Vì vậy, ví dụ:

  • điểm 1: (10.5)
  • điểm 2: (15,90)
+0

Cách đây một thời gian, họ dạy tôi ở trường về Sine, Cosine và Tangent. http://www.mathsisfun.com/sine-cosine-tangent.html –

+1

Đuổi - Xem: http://stackoverflow.com/questions/4672279/bresenham-algorithm-in-javascript –

+5

bạn đang tìm kiếm http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm – Alnitak

Trả lời

1

Với điểm A (10, 5) và B (15, 90) và C (x, y) trong AB chúng tôi có:

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

Điều bạn có thể làm là lặp lại từ x = 10 đến x = 15 và tính toán y tương ứng. Vì x và y là số nguyên, một số lần bạn phải làm tròn kết quả (hoặc bỏ qua nó).

9

Chỉnh sửa: Giải pháp dưới đây chỉ áp dụng từ quan điểm hình học. Vẽ trên màn hình khác với hình học lý thuyết, bạn nên lắng nghe những người đề xuất thuật toán của Bresenham.


Given, hai điểm, và biết rằng phương trình của dòng là y = m*x + b, nơi m là độ dốc và b đánh chặn, bạn có thể tính toán mb và sau đó áp dụng các phương trình cho tất cả các giá trị của trục X giữa các điểm A và B của bạn:

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]] 
Các vấn đề liên quan