Tengo algunos de la sección transversal de los datos de la encuesta, que es como este:
X Y Z pt_dt
2970969.635 359725.0088 83.4242 1-x
2970968.278 359722.2182 83.2591 1-x
2970941.771 359670.127 83.0655 1-x
2970961.369 359708.6424 83.4785 1-x
2970950.888 359688.048 85.2994 1-x
2970955.084 359696.2922 83.6479 1-x
2970953.47 359693.1165 84.9628 1-x
2970948.813 359683.977 83.1451 1-x
2970931.904 359650.7413 83.1042 1-x
Cuando yo uso la X y la Y para hacer puntos, puedo ver los puntos en el mapa como este:
Lo que necesito hacer ahora es conseguir los puntos en orden lineal (es decir, de izquierda a derecha, o de derecha a izquierda), de modo que yo pueda crear una línea 3D, que puede servir como el de la sección Transversal del perfil.
Mi algoritmo actual, es calcular la distancia entre cada par de puntos(Para una determinada sección transversal, el cual está indicado por pt_dt). La pareja, que tiene el máximo de distancia, son los puntos más exteriores. Yo, a continuación, organizar los puntos en función de la distancia desde uno de los puntos más exteriores. He implementado este algoritmo en python, y funciona.
Este algoritmo es O(n2); Mi todo el conjunto de datos se compone de alrededor de 5000 tipo de encuestas, por lo que cualquier complejidad que puedo reducir va a ser beneficioso.
Entonces, ¿hay una manera más eficiente, o el algoritmo para hacer esto?