Algoritmia - Rectangulo contenido en poligono amorfo

 
Vista:

Rectangulo contenido en poligono amorfo

Publicado por SetQ (1 intervención) el 08/03/2005 05:20:19
Hola, busco un algoritmo que haga lo siguiente a ver si alguien sabe donde
podria encontrarlo, o si alguien tiene código ya hecho (que quiera
compartir), o pseudocodigo, que sea suyo o que no lo sea, o alguna idea paralela para resolverlo que no sea usando estrictamente lo que dice el enunciado, estaria encantado de conocerlo porque me hace mucha falta resolver este problema y aunque me estoy devanando los sesos, cualquier ayuda, comentarios, o ideas serían muy agradecidas:

Tengo dos array de TPoint. Uno es un contorno poligonal Cerrado y que adopta cualquier forma, formado por n puntos, y el otro es un poligono con forma rectangular siempre . Necesito un algoritmo que pasandole esos dos arrays me devuelva Verdadero si el rectangulo está Parcialmente o Totalmente dentro del primer contorno, y False si está totalmente fuera.

Como dato adicional decir que el poligono amorfo originalmente era rectangular tambien, y ahora es el resultado de sucesivas "mordidas" o sustracciones que se han realizado en él. Esas "mordidas" son siempre con forma rectangular, y por eso todos los segmentos que forman el polígono son horizontales y verticales, es decir, que forman angulos rectos unos con otros.

Lo dicho, muchisimas gracias por cualquier sugerencia.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Determinar si un rectángulo está dentro de un polígono amorfo

Publicado por Alejandro (307 intervenciones) el 05/03/2024 00:25:22
SetQ, para resolver este problema, podemos utilizar el algoritmo del "ray casting" para determinar si un punto está dentro o fuera de un polígono. Aquí hay un enfoque general:

1. Preprocesamiento del polígono amorfo:
- Aplicar las sucesivas "mordidas" o sustracciones al polígono rectangular original.
- Asegurarse de que los segmentos resultantes sean horizontales o verticales, manteniendo ángulos rectos entre ellos

2. Ray casting:
- Para cada lado del rectángulo (segmentos de líneas), verificar si algún punto de ese lado está dentro del polígono amorfo.
- Utilizar el algoritmo del ray casting para determinar la intersección entre el rayo y los segmentos del polígono.

3. Verificación:
- Si al menos un punto de cada lado del rectángulo está dentro del polígono, entonces el rectángulo está parcial o totalmente dentro.
- Si todos los puntos de al menos un lado están fuera del polígono, entonces el rectángulo está completamente fuera.

A continuación se presenta un pseudocódigo en Python que implementa este enfoque:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def ray_casting(point, polygon):
    # Implementar algoritmo de ray casting para verificar si un punto está dentro del polígono.
    # Devolver True si está dentro, False en caso contrario.
 
def is_rectangle_inside(rectangle, polygon):
    for side in rectangle.sides():
        # Verificar cada lado del rectángulo
        is_inside = any(ray_casting(point, polygon) for point in side)
        if not is_inside:
            return False
 
    return True
 
# Ejemplo de uso:
# rectangle y polygon son listas de puntos TPoint
result = is_rectangle_inside(rectangle, polygon)
print(result)

Este pseudocódigo asume que tienes una clase `TPoint` que representa puntos en el plano. Asegúrate de adaptar el código según tus necesidades y la implementación específica de tus estructuras de datos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar