EDIT zu berechnen: Git Repo für Beispieldateienhttps://github.com/tpubben/lineIntersectVersuch mehrzeilige Kreuzungen unter Verwendung von Listen von Tupeln Python
ich versuche die Linienschnittpunkte in x zu berechnen, Y-Koordinaten auf einer Reihe von einander schneidenden Linien auf Basis der Kreuzung eine durchgehende Linie aus mehreren Segmenten.
Die durchgezogene Linie durch eine Liste von Tupeln dargestellt wird, wie folgt, wobei jedes Segment mit der x beginnt/y des Endpunkts des vorherigen Segments Koordinaten:
lineA = [((x1, y1),(x2,y2)), ((x2,y2),(x3,y3))....]
Die Kreuzungslinien in der gleichen Weise dargestellt werden, jedoch jedes eine diskrete Leitung (keine gemeinsame Punkte):
lineB = [((x1, y1),(x2,y2))...]
I durch die durchgehende Linie (linea) und überprüfen, um zu sehen, welche kreuzenden Linien schneiden, welche Segmente von linea iterieren versuche.
Ein Beispiel Bild von dem, was die Linienkreuzungen wie hier aussehen:
bisher habe ich versucht, die folgenden:
from __future__ import print_function
def newSurveys(nintyin, injectorin):
# pull data out of pre-prepared CSV files
fh = open(nintyin)
fho = open(injectorin)
rlines = fho.readlines()
rlines90 = fh.readlines()
segA = []
segB = []
segA90 = []
segB90 = []
for item in rlines:
if not item.startswith('M'):
item = item.split(',')
segA.append((float(item[4]),float(item[5])))#easting northing
segB.append((float(item[4]),float(item[5])))#easting northing
segB.pop(0)
z = len(segA)-1
segA.pop(z)
for item in rlines90:
if not item.startswith('N'):
item = item.split(',')
segA90.append((float(item[1]),float(item[0])))#easting northing
segB90.append((float(item[3]),float(item[2])))#easting northing
activeWellSegs = []
injector90Segs = []
for a, b in zip(segA, segB):
activeWellSegs.append((a,b))
for c, d in zip(segA90, segB90):
injector90Segs.append((c,d))
if len(activeWellSegs) >= len(injector90Segs):
lineA = activeWellSegs
lineB = injector90Segs
else:
lineA = injector90Segs
lineB = activeWellSegs
for l1 in lineA:
for l2 in lineB:
##### Use differential equation to calculate line intersections,
##### taken from another user's post
def line_intersection(line1, line2):
xdiff = (line1[0][0] - line1[1][0], line2[0][0] - line2[1][0])
ydiff = (line1[0][1] - line1[1][1], line2[0][1] - line2[1][1])
def det(a, b):
return a[0] * b[1] - a[1] * b[0]
div = det(xdiff, ydiff)
if div == 0:
raise Exception('lines do not intersect')
d = (det(*line1), det(*line2))
x = det(d, xdiff)/div
y = det(d, ydiff)/div
return x, y
print (line_intersection(l1, l2), file=lprint)
newSurveys('producer90.csv', 'injector.csv')
Sie haben das versucht und ...? Was ist die eigentliche Frage? Ich habe wenig Motivation, Testdaten zu generieren, Code auszuführen und dann * rate *, was deine Frage ist. Was ist das Problem mit deinem Code? Einige tatsächliche Testdaten mit erwarteter Ausgabe wären nett. –
Wollen Sie wirklich, dass die Definition von 'line_intersection' innerhalb der Schleife liegt? –
Ich bin ziemlich neu dazu ... mein Arbeitgeber hat mich sozusagen ins Feuer geworfen, weil ich etwas Erfahrung mit HTML und CSS habe (anscheinend Markup-Sprachen == Programmierung). Ich weiß nicht, ob ich das in einer verschachtelten Schleife will, leistungsmäßig ist es wahrscheinlich suboptimal, aber rohe Leistung spielt wahrscheinlich keine Rolle. Wie kann ich die Testdateien für Sie anhängen, die akzeptabel sind? – haplessgeo