Python :: Aufgabe #350
4 Lösungen
Schnittpunkt zweier Geraden endlicher Länge
Fortgeschrittener - Python
von hollst
- 20.04.2021 um 10:25 Uhr
In der unendlich ausgedehnten euklidischen 2D-Eben wähle man zufällig vier unterschiedliche Punkte P1, P2, P3 und P4. Gedanklich verbinde man P1 und P2 mit einer geraden Linie L12 sowie P3 und P4 mit einer geraden Linie L34.
Man schreibe eine Funktion, die als Rückgabewert ausgibt, ob sich L12 und L34 schneiden in Abhändigkeit von den Anfangs-/Endpunkten P1 ... P4.
Viel Spaß!
Man schreibe eine Funktion, die als Rückgabewert ausgibt, ob sich L12 und L34 schneiden in Abhändigkeit von den Anfangs-/Endpunkten P1 ... P4.
Viel Spaß!
Lösungen:
Python-Code
""" #350: Schnittpunkt zweier Geraden endlicher Länge In der unendlich ausgedehnten euklidischen 2D-Eben wähle man zufällig vier unterschiedliche Punkte P1, P2, P3 und P4. Gedanklich verbinde man P1 und P2 mit einer geraden Linie L12 sowie P3 und P4 mit einer geraden Linie L34. Man schreibe eine Funktion, die als Rückgabewert ausgibt, ob sich L12 und L34 schneiden in Abhändigkeit von den Anfangs-/Endpunkten P1 ... P4. """ def prf_schnittp(p1, p2, p3, p4): steig_a = (p2[1] - p1[1]) / (p2[0] - p1[0]) steig_b = (p4[1] - p3[1]) / (p4[0] - p3[0]) schni_a = p1[1] - steig_a * p1[0] schni_b = p3[1] - steig_b * p3[0] if steig_a == steig_b: print("Der Verlauf ist parallel") return None x = (schni_b - schni_a) / (steig_a - steig_b) y = steig_a * x + schni_a print("Der Schnittpunkt liegt bei (x y):", x, y) prf_schnittp([5, 1], [1, 5], [2, 2], [5, 5]) prf_schnittp([5, 1], [1, 5], [6, 2], [2, 6])
Python-Code
import random def intersection_lines(p1, p2, p3, p4): if ((p1[1]-p2[1])/(p1[0]-p2[0])) != ((p3[1]-p4[1])/(p3[0]-p4[0])): return True else: return False # test def rnd_points(n=1000, i=4): for _ in range(i): yield random.randint(-n, n), random.randint(-n, n) points1 = rnd_points() points2 = ((-5,-5), (5,5), (300, 100), (400, 200)) print(intersection_lines(*points1)) print(intersection_lines(*points2))
Python-Code
import numpy as np P1 = (1, 2) P2 = (3, 4) P3 = (2, 9) P4 = (6, 3) A = np.array([[P2[0] - P1[0], P3[0] - P4[0]], [P2[1] - P1[1], P3[1] - P4[1]]]) b = np.array([P3[0] - P1[0], P3[1] - P1[1]]) z = np.linalg.solve(A, b) check = True for e in z: if e > 1: check = False break if not check: print("Die Linien schneiden sich nicht") else: print("Die Linien schneiden sich")
Python-Code
def linie(p1, p2): A = (p1[1] - p2[1]) B = (p2[0] - p1[0]) C = (p1[0]*p2[1] - p2[0]*p1[1]) #print(A, B, -C) return A, B, -C def schnittpunkt(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 L1 = linie([0,1], [2,3]) L2 = linie([2,3], [0,4]) R = schnittpunkt(L1, L2) if R: print("Schnittpunkt gefunden:", R) else: print("Kein Schnittpunkt gefunden!")