Come sincronizzare i segmenti nelle polilinee?

3

I miei input sono due polilinee: ho avuto una polilinea e l'ho calcolata come offset, analogamente ai poligoni. Ecco il post utile: link

Quindi devo correggere le polilinee, tuttavia il numero di vertici (e segmenti) può variare, considerate tale polilinea:

A\    /D
  \__/
  B  C

Dopo averlo compensato ("dentro") ho potuto ottenere

A'\  /C'
   \/
   B'

Il segmento orizzontale è sparito.

Il mio compito è aggiungere segmenti vuoti di polilinea di origine o di destinazione (cioè vertici duplicati) in modo tale che il numero di vertici sia lo stesso, e che io possa scorrere su una polilinea e ottenere la sua controparte nell'altra polilinea per indice (nessun calcolo durante "get").

Nel caso precedente dovrei ottenere due polilinee: A, B, C, D (nessun cambiamento qui) e A ', B', B ', C' (B 'è duplicato).

Spero che la mia domanda sia chiara. Ora - come aggiungere i vertici "mancanti"?

    
posta greenoldman 16.12.2015 - 13:19
fonte

2 risposte

1

È necessario costruire una mappatura dei vertici dalla polilinea 1 alla polilinea 2, dove sono consentiti i duplicati. Una volta ottenuto ciò, la mappatura dei segmenti segue banalmente da quella.

Hai detto di conoscere l'offset (un valore reale positivo x ) e le coordinate del punto. Quindi per ogni segmento A - > B nel primo poligono, cerca il secondo poligono per un segmento parallelo A '- > B 'di distanza x . Se ne trovi esattamente uno, hai finito per A e B. Se non ne trovi nessuno, controlla se c'è un segmento "lunghezza zero" come A '- > A '(in altre parole un singolo punto) nel secondo poligono con distanza x da A- > B. Quando ce n'è esattamente uno, hai finito anche per A e B, entrambi si associano ad A '.

Se non trovi alcun segmento parallelo nella distanza specificata, le polilinee non possono essere mappate, quindi fermati.

La parte difficile è occuparsi della situazione in cui trovi più due o più segmenti paralleli da A- > B. In questo caso, inserisci "A- > B" nella "sacca dei segmenti non elaborati" e continua con il segmento successivo, supponiamo che sia "B- > C". Forse sei fortunato e questo ha esattamente una controparte parallela "B" - > C "", quindi ora sai dove mappare B. Dopo aver elaborato tutti i segmenti, ricomincia dall'inizio con tutti i segmenti non elaborati. Durante l'elaborazione di A- > B, ci sono ancora due possibili controparti nella seconda polilinea, ma ora sai dove deve essere mappato B, il che riduce il numero di possibilità per i segmenti paralleli di distanza x dove B si dirige alla B trovata " .

Continua quell'algoritmo fino a quando non puoi più elaborare alcun segmento dalla "borsa non lavorata" o il sacchetto diventa vuoto.

    
risposta data 17.12.2015 - 09:56
fonte
0

Che ne pensi di non aggiungerli?

Lasciatemi chiarire: potresti memorizzare queste informazioni altrove. Perché hai bisogno di un segmento che non c'è? Basta memorizzare il poligono originale, o memorizzare i segmenti sfalsati e la loro relazione con quello originale in memoria o un database ... serializzarlo in json forse.

spero di aver capito cosa intendevi ...

Vorrei solo salvare il poligono originale e l'operazione che hai effettuato, quindi puoi annullare e ripetere con valori diversi ...

Raccontare ciò che ti serve per ottenere una risposta più facilmente!

    
risposta data 05.07.2018 - 17:58
fonte

Leggi altre domande sui tag