FWIW, en Postgis hay una función desde 1.5, ST_Longestline que devuelve la longestline entre dos geometrías. Si usted alimenta esa función con la misma geometría dos veces en lugar de dos diferentes, obtendrá la línea más larga en esa geometría. http://postgis.net/docs/ST_LongestLine.html
@Whuber. usted escribe arriba que la línea más larga no tiene que comenzar y terminar en los vértices de los polígonos. Utilizas la letra I como ejemplo. No lo entiendo. Si I está representado por una línea con dos vértices, entonces esa línea tiene que ser la línea más larga en sí, ¿verdad?
Si la letra I está representada por un polígono delgado, la línea más larga será una línea diagonal desde, por ejemplo, el vértice superior izquierdo hasta el vértice inferior derecho.
Pero no puedo entender cómo puede haber una línea más larga que no termine y empiece en vértices del polígono.
¿He entendido algo mal?
/Nicklas
Ok, Whuber, te entendí mal, leí tu respuesta una vez más. Yo estaba hablando de lo que usted llama el diámetro y que estaba hablando de otra cosa. Lo siento
/Nicklas
0 votos
La anchura es "la medida más larga perpendicular a la medida de longitud" (como se ha indicado anteriormente).
1 votos
Creo que lo que está intentando hacer es crear un rectángulo de contorno mínimo no alineado con el eje para un polígono que primero está restringido por el segmento más largo dentro del polígono y después expandido por los vértices restantes del polígono.
0 votos
@Dandy: Sí, eso es lo que estoy buscando.
0 votos
@underdark: A la luz de la solución de Dandy, que propone calcular un diámetro, ¿podrías aclarar a qué te refieres exactamente con "el segmento más largo dentro del polígono"?
0 votos
@whober: Para mi caso de uso actual, el diámetro es suficiente. Intentaré aclarar la pregunta.
1 votos
@underdark: OK, en ese caso hay que saber dos cosas buenas. (1) El diámetro unirá dos vértices del polígono, por lo que una comprobación exhaustiva funcionará. (2) Sin embargo, la comprobación exhaustiva requiere N^2 operaciones para N vértices. Esto es un rendimiento terrible para polígonos grandes. Si tienes que lidiar con este tipo de cosas, hay algoritmos relativamente simples que promedian N*log(N) operaciones: eso es mucho más rápido. Puede encontrarlos codificados en Python y Avenue en el sitio ArcScripts de ESRI; busque las contribuciones de Dan Patterson. El código es claro y fácil de portar.
0 votos
@whuber: Tienes toda la razón en cuanto al rendimiento, sería en el mejor de los casos abismal para una geometría con muchos vértices. Para geometrías sencillas las diferencias entre la teoría y la práctica pueden sorprenderte. Por esta razón muchos algoritmos tendrán múltiples modos de operación basados en el tamaño de los datos. Sin embargo, creo que la mejor práctica es hacer que funcione antes de optimizar.
0 votos
@Dandy: Hace tiempo que dejaron de sorprenderme las diferencias entre la teoría y la práctica ;-). Sin embargo, hay una diferencia bastante marcada entre intentar optimizar un algoritmo que escala mal y sustituir el algoritmo por otro que escala mucho mejor. A menudo, empezar con un algoritmo que satisfaga tus necesidades de ingeniería te ahorrará mucho trabajo en el futuro, sobre todo si ya ha sido codificado y probado por otra persona :-).