Domanda

Sfondo:

Voglio essere in grado di prendere una matrice 2d (un'immagine davvero) e un insieme di punti che definiscono un poligono e disegnare quel poligono nella matrice.

Prima di fuggire e reinventare la ruota, ho pensato di chiedere se qualcuno fosse a conoscenza di librerie o codici esistenti in Octave che lo fanno. Finora, le mie ricerche attraverso i pacchetti Octave e google sono risultate vuote.

In caso contrario, nessuno dei due è troppo difficile da implementare, ma non sono sicuro di come disegnare un poligono pieno. Esiste un modo semplice / efficace per dire quali punti sono all'interno di un poligono e quali sono all'esterno? Grazie.

Modifica:

Il mio scopo non mostra nulla. In realtà, quello che sto guardando in particolare sono alcune cose di elaborazione delle immagini, come tracciare uno scafo convesso, trovare la sua area, trovare le parti dello scafo convesso non nell'oggetto originale, ecc.

Non vedo che Gnu Plot mi restituisca effettivamente tutti i dati con cui posso lavorare. Se sbaglio, dimmi come. Grazie.

È stato utile?

Soluzione

Per trovare punti all'interno di un poligono, puoi provare la funzione MATLAB di Darren Engwirda pubblicata su MATLAB Central: http://www.mathworks.com/matlabcentral/fileexchange/10391

Ho esaminato brevemente il codice e non vedo nulla di particolarmente specifico di MATLAB, quindi potrebbe essere eseguito così com'è in Octave.

Altri suggerimenti

EDIT: rispondendo alla modifica del PO verso l'alto per facilitare la ricerca:

Esistono una varietà di modi per rendere gnuplot render direttamente in un file ( scorri verso il basso fino a " Terminale ") che puoi quindi leggere per l'analisi. Ad esempio, puoi output in formato bitmap portatile che è sorprendentemente facile da leggere e scrivere (se non piccolo ed elegante). Nota che, per definizione, PBM ti darà una serie di bianchi e neri.

Ad esempio, controlla questo uso del " set terminal " e "imposta output" comanda di eseguire il rendering su una serie di pipe Unix che producono un file pbm e quindi un file png.

Fine EDIT:

Gnu Octave usa per impostazione predefinita gnuplot per la stampa e succede che gnuplot è abbastanza bravo a produrre poligoni pieni. Ecco alcune dimostrazioni utili di esattamente quel genere di cose. Ad esempio, ecco alcuni poligoni pieni :

# set terminal png transparent nocrop enhanced font arial 8 size 420,320 
# set output 'fillcrvs.4.png'
set grid nopolar
set grid xtics nomxtics ytics nomytics noztics nomztics \
 nox2tics nomx2tics noy2tics nomy2tics nocbtics nomcbtics
set grid front   linetype 0 linewidth 1.000,  linetype 0 linewidth 1.000
set key outside right top vertical Right noreverse enhanced autotitles nobox
set title "The red bat: abs(x) with filledcurve xy=2,5" 
plot abs(x) with filledcurve xy=2,5

Ecco un altro script dimostrativo che disegna la faccia pazza in fondo a la pagina delle curve riempite:

# set terminal png transparent nocrop enhanced font arial 8 size 420,320 
# set output 'fillcrvs.6.png'
unset border
set dummy t,y
set grid nopolar
set grid xtics nomxtics ytics nomytics noztics nomztics \
 nox2tics nomx2tics noy2tics nomy2tics nocbtics nomcbtics
set grid layerdefault   linetype 0 linewidth 1.000,  linetype 0 linewidth 1.000
unset key
set label 1 "gnuplot" at 0, 1.2, 0 centre norotate front nopoint offset character 0, 0, 0
set label 2 "gnuplot" at 0.02, -0.6, 0 centre norotate front nopoint offset character 0, 0, 0
set arrow 1 from -0.1, 0.26, 0 to 0.18, -0.17, 0 head front nofilled linetype 5 linewidth 4.000 size first 0.100,40.000,90.000
set parametric
set size ratio 1 1,1
set noxtics
set noytics
set title "Let's smile with parametric filled curves" 
set xrange [ -1.00000 : 1.00000 ] noreverse nowriteback
set yrange [ -1.00000 : 1.60000 ] noreverse nowriteback
plot [t=-pi:pi]     sin(t),cos(t) with filledcurve xy=0,0 lt 15,        sin(t)/8-0.5,cos(t)/8+0.4 with filledcurve lt 3,        sin(t)/8+0.5,cos(t)/8+0.4 with filledcurve lt 3,        t/5,abs(t/5)-0.8 with filledcurve xy=0.1,-0.5 lt 1,     t/3,1.52-abs(t/pi) with filledcurve xy=0,1.8 lt -1
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top