getLineIntersection static method

ILatLong? getLineIntersection(
  1. ILatLong line1Start,
  2. ILatLong line1End,
  3. ILatLong line2Start,
  4. ILatLong line2End,
)

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;
}