2017-04-24 9 views
0

Wie bekomme ich alle Koordinatenpunkte zwischen zwei Punkten in Python? Zum Beispiel: Ich habe einen Punkt mit den Koordinaten von x1, y1 und einen anderen mit x10, y10. Ich brauche alle Punkte zwischen ihnen (in diesem Fall zum Beispiel x2, y2 ... x9, y9). Vielen Dank für Ihre Hilfe!Wie berechnet man die Koordinaten der Linie zwischen zwei Punkten in Python?

+2

Beziehen Sie sich auf das Finden der Punkte innerhalb eines Radius, der durch den Abstand zwischen p1 und p10 definiert ist? (Wo 'p1 = (x1, y1)', und 'p10 = (x10, y10)')? – jrd1

+0

Es gibt eine unendliche Anzahl. Willst du nur die ganzen Zahlen? –

Antwort

2

"Alle von ihnen"? Es gibt eine unendliche Anzahl.

Sie können calculate the slope and intercept of the line between those two points. Wenn Sie diese Werte kennen, können Sie den Wert für y für jeden gewünschten Wert von x berechnen, indem Sie die Gleichung für die Linie verwenden.

Dies ist High School Algebra. Was ist das Problem?

Gegeben sind zwei Punkte (x1, y1) und (x2, y2) die Gleichung für die Linie zwischen ihnen ist:

y = m*x + b 

wo

m = slope = (y1-y2)/(x1-x2) 

und

b = y-intercept = (x1*y1 - x2*y1)/(x1-x2) 

Wenn Sie den Kreis Gang bedeuten „ziehen zwischen den zwei Punkten und finden Sie alle Punkte im Inneren ", ich Errechne den Mittelpunkt als den Mittelpunkt dieser Linie und den Radius, der der Länge dieser Linie entspricht. Sie berechnen, ob ein Punkt innerhalb oder außerhalb des Kreises liegt, indem Sie den Abstand vom Mittelpunkt bestimmen und ihn mit dem Radius vergleichen.

Es gibt unendlich viele Punkte innerhalb und außerhalb des Kreises. Was versuchst du wirklich hier zu machen?

+1

Ich denke, das OP bezieht sich auf das Finden von Punkten innerhalb eines Radius, der durch den Abstand zwischen 2 Punkten definiert ist (d. H. Aufgrund der Tatsache, dass er x1 und x10 erwähnte, was bedeutet, dass es höchstens 8 andere Punkte dazwischen gibt). – jrd1

+1

Ich kann nicht sagen, welche das OP bedeutet. Ich gab die Lösung für beide. Wenn die Down-Abstimmung deine ist, würde ich empfehlen, sie zu entfernen. Beide meiner Lösungen sind korrekt. – duffymo

+1

Einverstanden, und ebenso! Ich denke, deine Antwort hat beide genau beantwortet. Hoffentlich kann er das bald klären. Der Downvote war nicht meiner, aber die letzte Upvote war (schob es auf + 2/-1 von + 1/-1). – jrd1

1
def intermediates(p1, p2, nb_points=8): 
    """"Return a list of nb_points equally spaced points 
    between p1 and p2""" 
    # If we have 8 intermediate points, we have 8+1=9 spaces 
    # between p1 and p2 
    x_spacing = (p2[0] - p1[0])/(nb_points + 1) 
    y_spacing = (p2[1] - p1[1])/(nb_points + 1) 

    return [[p1[0] + i * x_spacing, p1[1] + i * y_spacing] 
      for i in range(1, nb_points+1)] 

print(intermediates([1, 2], [10, 6.5], nb_points=8)) 

# [[2.0, 2.5], [3.0, 3.0], [4.0, 3.5], [5.0, 4.0], 
# [6.0, 4.5], [7.0, 5.0], [8.0, 5.5], [9.0, 6.0]] 
1

scheint, dass Sie eine Liste der integer Punkte für das Liniensegment zwischen Punkten generieren möchten. Dieses Problem wird in Computergrafiken gelöst, zum Beispiel mit Bresenham algorithm oder DDA algo

Verwandte Themen