Voglio ottenere tutte le coordinate x, y tra 2 punti dati, su una linea retta. Mentre sembra un compito così facile, non riesco a capirlo.Ottieni tutte le coordinate in pixel tra 2 punti
Così, ad esempio:
- Punto 1: (10,5)
- Punto 2: (15,90)
Voglio ottenere tutte le coordinate x, y tra 2 punti dati, su una linea retta. Mentre sembra un compito così facile, non riesco a capirlo.Ottieni tutte le coordinate in pixel tra 2 punti
Così, ad esempio:
Dato il punto A (10, 5) e B (15, 90) e C (x, y) in AB disponiamo:
(x - 10)/(y - 5) = (15 - 10)/(90 - 5)
cosa si può fare è scorrere da x = 10 x = 15 e calcolare y corrispondente. Poiché x e y sono numeri interi, alcune volte devi arrotondare il risultato (o saltarlo).
Modifica: La soluzione di seguito si applica solo da un punto di vista geometrico. Disegnare su uno schermo è diverso dalla geometria teorica, dovresti ascoltare le persone che suggeriscono l'algoritmo di Bresenham.
Dato, due punti, e sapendo che l'equazione della linea è y = m*x + b
, dove m
è la pendenza e b
l'intercetta, è possibile calcolare m
e b
e quindi applicare l'equazione a tutti i valori dell'asse X tra i tuoi punti A e 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]]
Da un po 'di tempo mi hanno insegnato a scuola su Sine, Cosine e Tangent. http://www.mathsisfun.com/sine-cosine-tangent.html –
Dupe - Vedi: http://stackoverflow.com/questions/4672279/bresenham-algorithm-in-javascript –
stai cercando http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm – Alnitak