Does Gnu Octave tem algum código existente para desenhar linhas ou polígonos?

StackOverflow https://stackoverflow.com/questions/1429165

  •  07-07-2019
  •  | 
  •  

Pergunta

Fundo:

Eu quero ser capaz de tomar uma matriz 2d (uma imagem realmente), e um conjunto de pontos que definem um polígono e desenhar que polígono na matriz.

Antes de eu fugir e reinventar a roda, eu pensei que eu ia perguntar se alguém sabia de qualquer bibliotecas existentes ou código em Octave que faz isso. Até agora, minhas pesquisas através dos pacotes de Octave e Google vêm-se vazia.

Falhando que, nem é muito difícil de implementar, mas não estou certo como desenhar um polígono cheio. Existe uma maneira fácil / eficiente para dizer quais pontos estão dentro de um polígono e que estão fora? Obrigado.

Editar:

Meu propósito não está exibindo nada. Na verdade, o que eu estou procurando especificamente em fazer é algum material de processamento de imagem, como planejar um casco convexo, encontrando sua área, encontrando as partes do casco convexo não no objeto original, etc.

Não vejo que Gnu Plot realmente me devolver quaisquer dados que eu posso trabalhar. Se eu estiver errado, por todos os meios me dizer como. Obrigado.

Foi útil?

Solução

Para encontrar pontos dentro de um polígono, você pode tentar a função MATLAB de Darren Engwirda postada em MATLAB Central: http://www.mathworks.com/matlabcentral/fileexchange/10391

Eu olhei brevemente através do código e não vejo nada que é específico particularmente MATLAB, por isso pode ser executado como-está em Octave.

Outras dicas

EDIT: respondendo a edição do OP em cima para torná-lo mais fácil de encontrar:

Há uma variedade de maneiras para fazer GNUPlot prestam diretamente para um arquivo ( desloque-se para "Terminal"), que você pode ler no para análise. Por exemplo, você pode saída para portátil formato bitmap que é surpreendentemente fácil de ler e escrever (se não for pequeno e elegante). Note-se que, por definição, PBM lhe dará uma série de negros e brancos.

Por exemplo, confira este uso do "conjunto de terminais" e comandos "saída set" para tornar a uma série de tubos de Unix que produzem um PBM e, em seguida, um arquivo PNG.

End EDIT:

GNU Octave padrão usando gnuplot para plotagem e acontece que gnuplot é bastante bom em produzir polígonos preenchidos. Aqui estão algumas votos demonstrações de exatamente esse tipo de coisa. Por exemplo, aqui estão alguns polígonos preenchidos :

# 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

Aqui está outra roteiro demonstração de que desenha a face louca no fundo do página curvas cheio:

# 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top