8 votos

Redimensionar el polígono a lo largo de un eje

Utilizando lo siguiente ejemplo Soy capaz de cambiar el tamaño por la escala y el origen.

    polygonFeature.geometry.resize(scale, origin);
    vectorLayer.redraw();

Pero, ¿alguien tiene alguna sugerencia o código de ejemplo sobre cómo podría cambiar el tamaño de un polígono en uno de sus ejes?

Por ejemplo: Me gustaría cambiar el tamaño del polígono naranja a algo parecido al polígono rojo. Así, sólo se mueven los bordes norte y sur, mientras que los bordes este y oeste permanecen constantes.

enter image description here

EDITAR #1 He aquí un caso de uso y datos de ejemplo: Un usuario sólo quiere una parte del rectángulo naranja porque sólo le interesa la costa y los vendedores de satélites le cobrarán más por la imagen completa. El usuario tiene que especificar qué parte de la imagen quiere pedir.

Aunque, no necesito la solución completa con asas de tamaño todo lo que necesito es la capacidad de cambiar el tamaño de la altura del polígono .

enter image description here enter image description here

enter image description here

EDITAR #2: Tal vez estoy haciendo esto mal. Necesito una solución de openlayers javascript (navegador) y no puedo volver al servidor para cambiar el tamaño. Quizás lo que debería hacer es interpolar puntos a lo largo de los bordes este y oeste de la geometría del polígono (puntos negros). Luego crear dos líneas (líneas verdes) en las que el usuario pueda arrastrar pero restringiendo el movimiento (arrastre) a esos puntos interpolados. ¿Cuando el usuario "termina" obtengo el polígono amarillo restante?

enter image description here

4voto

Vasu Puntos 11

1voto

Symmetric Puntos 158

En el caso general, utilizaría una transformación de perspectiva para transformar tu cuadrilátero original en un cuadrado unitario y viceversa.

Los pasos básicos son:

  1. Encuentre el matriz de transformación afín de su cuadrante a la plaza de la unidad.
  2. Escala el cuadrado de la unidad en la misma proporción que el usuario quiere escalar el cuadrado original.
  3. Invierte la matriz obtenida en el paso 1.
  4. Aplica esa matriz inversa al cuadrado aplastado para transformarlo de nuevo en el espacio del mapa.

Advertencias:

  • Comprueba que tienes una matriz válida y que es invertible.
  • Sólo funcionará con éxito con cuadriláteros convexos.

Para el trabajo que estás haciendo no deberías tener ningún caso impar como los polígonos cóncavos. No estoy seguro de lo que pasaría con los quads que cubren las regiones polares, sospecho que tendrías que proyectarlo en alguna proyección polar primero.

El enlace publicado en el paso 1. lleva a un documento con muchas matemáticas y a un código con muchas plantillas de C++. Pero no debería ser demasiado difícil de averiguar cómo funciona el código porque es sólo una pequeña función en la parte superior de la archivo .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X