"""Ray casting para determinar si un punto esta dentro de un anillo (ring) poligonal.""" def point_in_ring(lon: float, lat: float, ring: list[tuple[float, float]]) -> bool: """Determina si el punto (lon, lat) esta dentro del anillo cerrado ring. Usa el algoritmo de ray casting. Retorna False si len(ring) < 3. Args: lon: longitud del punto en grados. lat: latitud del punto en grados. ring: lista de vertices (lon, lat) que forman el anillo. Returns: True si el punto esta dentro del anillo, False en caso contrario. """ inside = False n = len(ring) if n < 3: return False j = n - 1 for i in range(n): xi, yi = ring[i] xj, yj = ring[j] intersects = ((yi > lat) != (yj > lat)) and ( lon < (xj - xi) * (lat - yi) / (yj - yi + 1e-15) + xi ) if intersects: inside = not inside j = i return inside