NET 5.x; C# 9.x; VS-2019
Hier eine Lösung mittels Geradengleichung:
C#-Code
using System;
// Geraden schneiden sich:
Point P1 = new(-4.5, 5.8);
Point P2 = new(3.1, -2);
Point P3 = new(4.5, 6.2);
Point P4 = new(-2.7, -7.8);
// Parallele Geraden => kein Schnittpunkt:
// Point P1 = new(-5, 5);
// Point P2 = new(-5, -5);
// Point P3 = new(5, 5);
// Point P4 = new(5, -5);
Line L12 = new(P1, P2);
Line L34 = new(P3, P4);
IntersectLine isl = new(L12, L34);
Console.WriteLine(isl);
record Point(double X, double Y);
record Line(Point P1, Point P2);
record IntersectLine (Line L1, Line L2)
{
// Geradengleichung 1: L12 = (yP2 - yP1) / (xP2 - xP1) * (x - xP1) + yP1;
// Geradengleichung 2: L34 = (yP4 - yP3) / (xP4 - xP3) * (x - xP3) + yP3;
// beide Geradengleichungen gleich setzen:
private double S1 => Math.Round((-L1.P2.X * L2.P1.X * L1.P1.Y + L1.P2.X * L2.P2.X * L1.P1.Y + L1.P1.X * L2.P1.X * L1.P2.Y
- L1.P1.X * L2.P2.X * L1.P2.Y + L1.P1.X * L2.P2.X * L2.P1.Y - L1.P2.X * L2.P2.X * L2.P1.Y
- L1.P1.X * L2.P1.X * L2.P2.Y + L1.P2.X * L2.P1.X * L2.P2.Y) /
(-L2.P1.X * L1.P1.Y + L2.P2.X * L1.P1.Y + L2.P1.X * L1.P2.Y
- L2.P2.X * L1.P2.Y + L1.P1.X * L2.P1.Y - L1.P2.X * L2.P1.Y
- L1.P1.X * L2.P2.Y + L1.P2.X * L2.P2.Y), 3);
// S1 in die 2. Gleichung einsetzen
private double S2 => Math.Round((L2.P2.Y - L2.P1.Y) / (L2.P2.X - L2.P1.X) * (S1 - L2.P1.X) + L2.P1.Y, 3);
public override string ToString() => double.IsNaN(S1) || double.IsNaN(S2) ? "Kein Schnittpunkt" : $"Schnittpunkt: ({S1}, {S2})";
}