kann ich nicht beiseite,
So haben wir lineares System:
A * x + B * y = C
A * x + B * y = C
wir tun es mit der Cramerschen Regel, so Lösung kann in Determinanten zu finden:
x = D x/D
y = D y/D
wo D Hauptdeterminante des Systems ist:
A B
A B
und D x und D y aus Matrizes gefunden werden:
C B
C B
und
A C
A C 2
(Hinweis, wie C Spalte substitues folglich die COEF. Spalten von x und y)
So, jetzt dem Python, für uns aus Gründen der Klarheit Chaos Dinge nicht auf die Zuordnung zwischen Mathematik und Python tun lassen.Wir werden Array verwenden L
für unsere coefs Speicherung A, B, C der Liniengleichungen und intestead von ziemlich x
, y
wir [0]
haben werden, [1]
, aber trotzdem. So, was ich oben geschrieben wird das folgende Formular weiter im Code hat:
für D
L1 [0] L1 [1]
L2 [0] L2 [1]
für D x
L1 [2] L1 [1]
L2 [2] L2 [1]
für D y
L1 [0] L1 [2]
L2 [ 0] L2 [2]
Jetzt gehen zur Codierung:
line
- produziert coefs A, B , C der Geradengleichung von zwei Punkten vorgesehen,
intersection
- findet Schnittpunkt (falls vorhanden) aus zwei Zeilen von coefs vorgesehen.
from __future__ import division
def line(p1, p2):
A = (p1[1] - p2[1])
B = (p2[0] - p1[0])
C = (p1[0]*p2[1] - p2[0]*p1[1])
return A, B, -C
def intersection(L1, L2):
D = L1[0] * L2[1] - L1[1] * L2[0]
Dx = L1[2] * L2[1] - L1[1] * L2[2]
Dy = L1[0] * L2[2] - L1[2] * L2[0]
if D != 0:
x = Dx/D
y = Dy/D
return x,y
else:
return False
Anwendungsbeispiel:
L1 = line([0,1], [2,3])
L2 = line([2,3], [0,4])
R = intersection(L1, L2)
if R:
print "Intersection detected:", R
else:
print "No single intersection point detected"
Sind diese Liniensegmente oder Linien? – user2357112
Dieses Problem läuft meist auf "Mathe". Sie können mithilfe der algebraischen Manipulation einen Ausdruck für die Koordinaten der Schnittmenge finden und diesen Ausdruck in Ihr Programm einfügen. Denken Sie daran, zuerst nach parallelen Linien zu suchen. – user2357112
Suche stackoverflow, bevor Sie eine Frage stellen: [die Antwort] [1] [1]: http://stackoverflow.com/questions/3252194/numpy-and-line-intersections –