Come posso mappare un numero di punti di un poligono ai punti corrispondenti di un rettangolo più grande?

0

Supponiamo che io abbia un'immagine poligonale 2D e un'immagine rettangolo 2D più grande e che abbia una raccolta di punti per ognuno che voglio allineare.

Per esempio il poligono ha la raccolta punti:

[PA(a, b), PB(c, d), (PC(e, f)]

E il rettangolo ha la raccolta punti:

[RA(g, h), RB(i, j), RC(k, l)]

Esiste un algoritmo che posso utilizzare per trasformare pragmaticamente il poligono in modo tale che i punti si allineino ai punti su Rettangolo, Ridimensionamento e Rotazione in modo che il poligono rimanga intatto?

Nota: sto usando tre punti nell'esempio; tuttavia, un algoritmo con un numero arbitrario di punti uguali va bene.

Per maggiore chiarezza:

I per trasformazione intendo: Scala e Ruota. L'obiettivo è che l'immagine poligonale non è "deformata"

Penso che circoscritto descriva ciò che sto cercando di realizzare; tuttavia, per tutti gli scopi pratici, il rettangolo sarà sempre abbastanza grande da contenere il poligono.

Immagini:

Dato:

E:

Voglio:

    
posta SMTF 03.06.2015 - 20:14
fonte

1 risposta

1

In generale, no.

I due gruppi di tre punti ciascuno definiscono un triangolo. A meno che quei triangoli non siano proporzionali tra loro, non esiste una trasformazione affine 2D (cioè senza curvatura) che può mappare l'uno all'altro.

Nel caso speciale in cui sono proporzionali, un approccio geometrico sarebbe:

  1. Calcola i cerchi circoscriventi per ogni serie di punti.
  2. Traduci il poligono con il negativo del centro del suo cerchio, centrando la sua circonferenza.
  3. Scala in base al rapporto dei raggi dei due cerchi.
  4. Ruota il poligono (sull'origine) per allineare le direzioni dei punti.
  5. Traduci il poligono al centro della cerchia del rettangolo.

Potrebbe essere necessario eseguire una riflessione tra i passaggi 3 e 4 se l'ordine dei due punti in ciascun set non è identico.

    
risposta data 04.06.2015 - 01:12
fonte

Leggi altre domande sui tag