2009-09-15 10 views
2

Contexte:Est-ce que Gnu Octave a un code existant pour tracer des lignes ou des polygones?

Je veux être en mesure de prendre une matrice 2D (une image vraiment), et un ensemble de points définissant un polygone, et dessiner ce polygone dans la matrice. Avant de me lancer et de réinventer la roue, je me suis demandé si quelqu'un connaissait des bibliothèques ou du code existant dans Octave. Jusqu'à présent, mes recherches dans les paquets Octave et google sont apparues vides. Dans ce cas, ni l'un ni l'autre n'est trop difficile à mettre en œuvre, mais je ne sais pas comment dessiner un polygone rempli. Existe-t-il un moyen simple/efficace de dire quels points sont à l'intérieur d'un polygone et lesquels sont à l'extérieur? Merci.

Éditer:

Mon but n'affiche rien. En fait, ce que je suis en train de faire, c'est de traiter des images, de tracer une coque convexe, de trouver sa zone, de trouver les parties de la coque convexe pas dans l'objet original, etc.

Je ne vois pas que Gnu Plot me redonne toutes les données avec lesquelles je peux travailler. Si je me trompe, dites-moi comment. Merci.

Répondre

1

Pour trouver des points dans un polygone, vous pouvez essayer la fonction Matlab de Darren Engwirda affichée sur MATLAB Central: http://www.mathworks.com/matlabcentral/fileexchange/10391

J'ai regardé brièvement le code et je ne vois rien de particulièrement spécifique à MATLAB, donc il peut fonctionner tel quel dans Octave.

+0

J'ai déjà fini par implémenter quelque chose moi-même, mais j'apprécie le lien. Je vais devoir voir si ça marche dans Octave. – BigBeagle

1

EDIT: répondre à l'édition de l'OP en haut pour le rendre plus facile à trouver:

Il y a un variety of ways to make gnuplot render directly to a file (faites défiler jusqu'à « Terminal ») que vous pouvez ensuite lire dans l'analyse. Par exemple, vous pouvez output to portable bitmap format qui est remarquablement facile à lire et à écrire (si ce n'est pas petit et élégant). Notez que, par définition, PBM vous donnera un tableau de noirs et blancs. Par exemple, consultez cette utilisation du "set terminal" and "set output" commands pour effectuer un rendu sur une série de tuyaux Unix qui produisent un fichier pbm puis un fichier png.

Fin EDIT:

par défaut Gnu Octave à l'aide gnuplot pour tracer et il arrive que gnuplot est assez bonne à produire des polygones pleins. Voici quelques helpful demonstrations exactement de ce genre de chose. Par exemple, here are some filled polygons:

# 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 

Here's another demonstration script qui tire le visage fou au bas de la page courbes remplies:

# 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 
+0

Merci, mais pas tout à fait sûr que c'est ce dont j'ai besoin. S'il vous plaît voir mon edit. Merci encore. – BigBeagle