getLineIntersection static method
Findet den Schnittpunkt von zwei Liniensegmenten.
@param line1Start Der Startpunkt des ersten Liniensegments. @param line1End Der Endpunkt des ersten Liniensegments. @param line2Start Der Startpunkt des zweiten Liniensegments. @param line2End Der Endpunkt des zweiten Liniensegments. @return Der Schnittpunkt als ILatLong oder null, wenn kein Schnittpunkt gefunden wurde.
Implementation
static ILatLong? getLineIntersection(ILatLong line1Start, ILatLong line1End, ILatLong line2Start, ILatLong line2End) {
final x1 = line1Start.longitude;
final y1 = line1Start.latitude;
final x2 = line1End.longitude;
final y2 = line1End.latitude;
final x3 = line2Start.longitude;
final y3 = line2Start.latitude;
final x4 = line2End.longitude;
final y4 = line2End.latitude;
final x12diff = x1 - x2;
final x34diff = x3 - x4;
final y12diff = y1 - y2;
final y34diff = y3 - y4;
final denominator = x12diff * y34diff - y12diff * x34diff;
if (denominator == 0.0) {
// Die Linien sind parallel.
return null;
}
final x13diff = x1 - x3;
final y13diff = y1 - y3;
final tNumerator = x13diff * y34diff - y13diff * x34diff;
final uNumerator = -(x12diff * y13diff - y12diff * x13diff);
final t = tNumerator / denominator;
final u = uNumerator / denominator;
if (t >= 0.0 && t <= 1.0 && u >= 0.0 && u <= 1.0) {
final intersectionX = x1 + t * (x2 - x1);
final intersectionY = y1 + t * (y2 - y1);
return LatLong(intersectionY, intersectionX);
}
return null;
}