Imagen de prueba:
Pasos:
- Utilizamos el ya mencionado método bfs para poder obtener los pixeles de los diferentes figuras de la imagen, y posteriormente enviarlas a nuestro método verificador de polígonos.
- En esta parte ya con las coordenadas especificas, seleccionamos un primer pixel donde iniciaríamos, después fuimos verificando sus vecinos si tenían una misma pendiente, esto nos indicaría si pertenecen a una misma linea en caso de que así sea las vamos guardando en una lista.
- Ya que el programa no encuentre mas partes de esa linea en particular, verifica si aun existen coordenadas o pixeles sin revisar y agregamos una nueva linea y repetimos el proceso anterior.
- Ya teniendo los segmentos de probables lineas, ahora se verifican que tanto porcentaje equivalen al objeto original y esto nos dirá un estimado del porcentaje si es o no un polígono.
Código para detectar las lineas
Código para detectar las lineas
Ahora con esto podríamos saber si es o no es pero no nos indica alguna información sobre que polígono es. Para esto se uso lo siguiente :
Ya teniendo los segmentos, se calculo el punto medio de cada uno de los segmentos, además del punto inicial y el punto final de cada uno de ellos.
Código para detectar puntos medios, punto inicial, punto final y centro
Código para detectar puntos medios, punto inicial, punto final y centro
Ya teniendo esto se calculo el medio de la figura y usando los puntos medios, podemos mover los segmentos de tal manera que nos ayude a comprender mas sobre la figura. Para poder trasladarlo solo se saco la diferencia de los puntos medios en "x" e "y", con respecto al punto central de la figura. Posteriormente se traslado las coordenadas finales e iniciales de los segmentos con respecto a esa diferencia.
Código de segmentos
Código de segmentos
Final:
Otra figura:
Aunque no siempre es muy exacto por diferentes factores.
Click aquí para el repositorio
Gracias por su atención
Pues, no es exactamente el mismo método que se pidió y al inicio hace cosas más complejas de lo necesario, está bastante decente. 9 pts.
ResponderEliminar