Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

314
Vistas
Algoritmo para dividir una línea multipunto (matriz de coordenadas) en una matriz de segmentos de línea

Lo siento si esto es un poco confuso, pero he estado atascado en esto durante mucho tiempo. Estoy trabajando en una aplicación de mapeo con coordenadas lat/lng. Para simplificarlo, usaré números enteros.

Digamos que tengo una línea de n puntos donde n > 0 (en este caso n = 3).
ingrese la descripción de la imagen aquí

Esta línea se representa en el código como una matriz de puntos x, y

 [ [1, 1] // E [2, 2] // F [3, 3] // G ]

Necesito encontrar una manera de convertir esto en una matriz de segmentos de línea donde el siguiente segmento comienza en el punto del último.

Por ejemplo, la nueva matriz convertida a partir de la última se vería así:

 [ [ //Line segment 1 [1, 1] // Point E [2, 2] // Point F ], [ //Line segment 2 [2, 2] // Point F [3, 3] // Point G ] ]

Espero que esto tenga sentido. Esto debería funcionar si n es 1, 5, 200, etc.
Solo necesito el algoritmo para que el psuedocódigo funcione bien. Si debe tener un idioma que mecanografiado o c # son mis mejores.

Gracias de antemano por cualquier ayuda/consejo. Lo aprecio.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Este es un problema clásico del poste de la cerca .

El algoritmo es que cada elemento en el índice i en la matriz de salida es un par que consiste en el elemento en la posición i y el elemento en la posición i+1 de la matriz de entrada. La matriz de salida contiene uno menos elementos que la matriz de entrada. Si hay N elementos en la matriz de entrada, hay N-1 elementos en la matriz de salida.

En JavaScript se puede hacer con algo de ingenio como este:

 const input = [ [1, 1], [2, 2], [3, 3] ]; const output = input.map((_, i, a) => [a[i], a[i + 1]]).slice(0, -1); console.log(output);

Aquí el map se usa para preparar un par para cada elemento en la matriz original. Ese par consiste en el artículo y el artículo que le sigue. Podemos aceptar el hecho de que el lenguaje JavaScript tolerará el acceso a elementos más allá del final de la matriz al devolver undefined . El último elemento en el resultado contendrá un segundo elemento indefinido del par mientras intenta acceder al elemento justo después del final de la matriz. Esto es legal, pero no deseado, por lo que podemos slice ese último elemento (eliminarlo).

Probablemente la forma más clara:

La mayoría de los lenguajes fuertemente tipados no le permitirán acceder al elemento en el índice N de una matriz de N elementos, por lo que, en realidad, construir su matriz de salida con un bucle o mapa directo donde i va de 0 a N-2 es lo mejor y solo seleccione elementos en el índice [i] y [i+1] para su par.

 const input = [ [1, 1], [2, 2], [3, 3] ]; const output = new Array(input.length - 1); for (let i = 0; i < input.length - 1; ++i) output[i] = [input[i], input[i + 1]]; console.log(output);

Escribí lo anterior como output[i] = [input[i], input[i + 1]] y predeclaré la longitud de la matriz de salida porque esto produce el código que más se acerca a la forma en que se expresa el algoritmo.

about 4 years ago · Juan Pablo Isaza Denunciar

0

En C#, esto se puede hacer con una simple expresión LINQ:

 var result = input.Zip(input.Skip(1)).ToArray();

Recibirá una matriz de tuplas de valor, donde cada tupla contiene un par de puntos.

Demostración en línea: https://dotnetfiddle.net/b6z0es

about 4 years ago · Juan Pablo Isaza Denunciar

0

 var pts = new[] { (1, 1), (2, 2), (3, 3) }; var prevPt = pts[0]; var segments = pts.Skip(1).Select(pt => { var seg = new { a = prevPt, b = pt }; prevPt = pt; return seg; }); foreach (var s in segments) Console.WriteLine(sa + "-" + sb);

producción:

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda