C/Visual C - como saber si un poligono es concavo ó convexo

 
Vista:

como saber si un poligono es concavo ó convexo

Publicado por Jesus Araiza Cruz (2 intervenciones) el 07/11/2001 14:34:40
Que tal, me presento, mi nombre es Jesus Araiza, y aunque frecuento el foro, nunca me habia visto en la necesidad de preguntar una duda, por eso no me ven mucho por aqui, el motivo de esta pregunta es saber si alguno de ustedes ha realizado un programa en el que se tenga que saber sin un poligono, previo trazado del mismo con puntos dados por el usuario, es concavo ó convexo
ya saben, concavo si todos sus angulos internos son menores de 180° y convexo si al menos uno de ellos es mayor de 180°, ¿alguno de ustedes tiene un programa que me pudiera ayudar?, es que la verdad con la pura definicion de cada poligono, no se me ocurre como saber si es uno o es otro, y no he podido encontrar ningun programa ejemplo en la red.
Espero puedan ayudarme.
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

RE:como saber si un poligono es concavo ó convexo

Publicado por German B. (27 intervenciones) el 07/11/2001 18:55:02
Me puse a pensar en este problema y me pareció interesante. No voy a pasarte código fuente porque no me tomé el tiempo de programarlo y seguramente podés hacerlo vos, pero encontré el criterio que permite determinar si el polígono es cóncavo.
Asumo que tenemos los puntos de los vértices en un vector de n posiciones, expresados en (x,y), y tomados en el sentido de las agujas del reloj (es imprescindible que estén en un sentido determinado y no en cualquier orden), y que X aumenta hacia la derecha e Y aumenta hacia arriba. Cualquier diferencia con tu contexto requerirá hacer ajustes al criterio.
Encontré que como base la figura ideal para analizar es un octógono (que es cóncavo), donde tenemos 2 lados horizontales, 2 verticales, y 4 oblicuos, como un cuadrado al que le cortamos las puntas.
Uno de los vértices será el primero del vector, supongamos el punto superior de la vertical izquierda. Es el punto [0], la numeración va hasta [7] que es el punto inferior de la misma vertical. En esta figura encontramos las siguientes relaciones, comparando cada punto con el que le sigue:
x0 < x1, y0 < y1
x1 < x2, y1 = y2
x2 < x3, y2 > y3
x3 = x4, y3 > y4
x4 > x5, y4 > y5
x5 > x6, y5 = y6
x6 > x7, y6 < y7
x7 = x0, y7 < y0
Cualquier figura cóncava va a coincidir con esas condiciones, en ese orden, salvo que algunas pueden ser salteadas, y algunas pueden repetirse (las repeticiones solo pueden estar seguidas, no separadas).
Ejemplo, un cuadrado da esto:
x0 < x1, y0 = y1
x1 = x2, y1 > y2
x2 > x3, y2 = y3
x3 = x0, y3 < y0
Como ves, repite la
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

Continuación !!

Publicado por Germán B. (27 intervenciones) el 08/11/2001 00:39:53
[este foro tiene un espacio muy limitado... intentaré repetir lo que escribí hace unas horas]
Decía, que con el cuadrado se repiten las condiciones, aunque se saltearon unas cuantas.
Si en ese cuadrado consideráramos también un punto intermedio de cada lado, encontraríamos una serie igual pero donde cada condición se duplica.
Entonces, el criterio para determinar si es cóncavo es que respete la "regla del octógono" pudiendo saltear condiciones o repetirlas, pero siempre siguiendo el mismo orden.
Aclaración importante: el punto inicial que di para el octógono es arbitrario, la lista debe ser entendida como circular (después de la última condición sigue la primera). Es decir que al analizar las condiciones en un polígono cualquiera, habría que localizar la condición del octógono que coincide con la primera de nuestro polígono, y luego seguir analizando en orden.
Espero que sirva.
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