2012-11-21 6 views
5

Ich möchte alle x, y Koordinaten zwischen 2 gegebenen Punkten auf einer geraden Linie erhalten. Während dies scheint so eine leichte Aufgabe, kann ich nicht scheinen, meinen Kopf drum herum.Erhalte alle Pixelkoordinaten zwischen 2 Punkten

So zum Beispiel:

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

Das vor einer Weile unterrichten sie mich in der Schule über Sine, Cosine und Tangent. http://www.mathsisfun.com/sine-cosine-tangent.html –

+1

Dupe - Siehe: http://stackoverflow.com/questions/4672279/bresenham-algorithm-in-javascript –

+5

Sie suchen nach http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm – Alnitak

Antwort

1

der Punkt A Given (10, 5) und B (15, 90) und C (x, y) in aB haben wir:

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

Was können Sie tun, ist von x = 10 bis x = 15 zu durchlaufen und die entsprechenden y zu berechnen. Da x und y ganze Zahlen sind, müssen Sie das Ergebnis manchmal runden (oder überspringen).

9

Bearbeiten: Die folgende Lösung gilt nur aus einer geometrischen Sicht. Das Zeichnen auf einem Bildschirm ist anders als die theoretische Geometrie, Sie sollten den Leuten zuhören, die den Bresenham-Algorithmus vorschlagen.


gegeben, zwei Punkte, und zu wissen, dass die Gleichung der Linie y = m*x + b ist, wo m die Steigung und b der Schnittpunkt, Sie m und b und wenden Sie dann die Gleichung für alle Werte der X-Achse berechnen zwischen deinen A- und B-Punkten:

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]] 
Verwandte Themen