2013-07-03 10 views
11

mi è stato dato questo compito da mia moglie, quindi è la massima priorità :-)Outline tramando algoritmo

Ho una collezione di punti (in realtà Northings & Eastings, ma non importa). Voglio prendere quei punti e creare una serie di vettori che rappresentano il contorno, in modo da poter tracciare su Google Earth.

Quindi, qualcosa di simile:

#      # 
      #    #  # 
#    # # 
     # # 

      # 

darebbe:

#-----------------------#-- 
/       \ --# 
#     #------------/ 
\-----#  /
     \ /
      # 

Una possibile soluzione mi è venuta, è quello di calcolare i vettori tra ogni punto, e scartare ogni vettore che si sovrappone un altro vettore. Non l'ho ancora implementato (non proprio sicuro di come), ma mi sono chiesto se ci sono altri modi.

L'algoritmo deve solo essere eseguito un paio di volte, quindi se ci vuole un'ora per corsa e concerti di RAM non è un problema.

+0

Buona domanda. Potresti ricevere una risposta migliore da http://programmers.stackexchange.com o http://math.stackexchange.com – Fogmeister

+3

Perché quella forma? Perché non disegnare lo [scafo convesso] (http://en.wikipedia.org/wiki/Convex_hull) dei punti? – Chowlett

+0

@Chowlett basta fare la risposta; stava per dire che ci sono diverse forme "solide" che potrebbero essere fatte con quei punti. –

risposta

7

Formulazione di poligoni candidati

Sembra che quello che stai cercando per un poligono tale che

  • tutti i suoi vertici sono nel vostro set point
  • contiene ogni punto nel vostro punto set

Definisce un insieme ammissibile di poligoni candidati rispetto al set di punti.

Scafo convesso?

Una funzione obiettivo potrebbe essere "Tra questi poligoni, scegliere quello con il numero minimo di vertici". Quello sarebbe lo scafo convesso del set di punti. Altre risposte affrontano questo approccio, quindi non dirò altro.

Qualcosa di più ...

Ma questa non è l'unica funzione obiettivo si poteva scegliere. Ad esempio, potresti invece avere un compromesso tra avere meno vertici, avere meno spazio totale e avere angoli meno nitidi ai vertici. Non conosco alcun algoritmo con nome esistente per quel problema, ma è sicuramente interessante.

Un approccio potrebbe essere quello di iniziare trovando lo scafo convesso, quindi "tira dentro" i bordi ai vertici interni nelle posizioni in cui il costo del vertice extra è superato dal vantaggio di avere meno area totale.

Ad esempio, questo:

enter image description here

diventerebbe questo, tirando nel bordo lungo la parte superiore:

enter image description here

Questo secondo poligono potrebbe essere più "naturale" adatto per il set di punti, anche se è non lo scafo convesso del set di punti.

+1

Per un set di punti 2D, lo scafo "concavo" che descrivi può essere trovato con forme alfa. – Cyril

+0

@Xerto Nice, ho imparato qualcosa di nuovo. :) OP dovrebbe assolutamente dare un'occhiata a quelli. –

0

Here è una libreria per scoprire convesso da code.google.com

Here è una libreria github per la stessa cosa, ma utilizzando Partita Convex Hull Algoritmo di Jarvis.

Spero che aiutano!