Есть ли в Gnu Octave какой-либо существующий код для рисования линий или многоугольников?

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

  •  07-07-2019
  •  | 
  •  

Вопрос

Фон:

Я хочу иметь возможность взять двумерную матрицу (на самом деле изображение) и набор точек, определяющих многоугольник, и нарисовать этот многоугольник в матрице.

Прежде чем я побегу изобретать велосипед, я решил спросить, знает ли кто-нибудь о каких-либо существующих библиотеках или коде в Octave, которые делают это.Пока что мои поиски в пакетах Octave и Google оказались пустыми.

В противном случае реализовать ни то, ни другое не так уж сложно, но я не уверен, как нарисовать заполненный многоугольник.Есть ли простой/эффективный способ определить, какие точки находятся внутри многоугольника, а какие снаружи?Спасибо.

Редактировать:

Моя цель ничего не отображать.На самом деле, я конкретно рассматриваю некоторые возможности обработки изображений, такие как построение выпуклой оболочки, определение ее площади, поиск частей выпуклой оболочки, отсутствующих в исходном объекте, и т. д.

Я не вижу, чтобы Gnu Plot действительно возвращал мне какие-либо данные, с которыми я мог бы работать.Если я ошибаюсь, обязательно скажите мне, как это сделать.Спасибо.

Это было полезно?

Решение

Для поиска точек внутри многоугольника вы можете попробовать функцию MATLAB Даррена Энгвирды, размещенную на MATLAB Central: http://www.mathworks.com/matlabcentral/fileexchange/10391

Я бегло просмотрел код и не увидел ничего особенного для MATLAB, поэтому в Octave он может работать как есть.

Другие советы

РЕДАКТИРОВАТЬ:ответ на редактирование ОП вверху, чтобы его было легче найти:

Есть различные способы заставить gnuplot отображать непосредственно в файл (прокрутите вниз до «Терминала»), который вы затем сможете прочитать для анализа.Например, вы можете вывод в переносимый растровый формат который поразительно легко читать и писать (если не сказать маленький и элегантный).Обратите внимание, что по определению PBM предоставит вам массив черных и белых цветов.

Например, ознакомьтесь с этим использованием Команды «установить терминал» и «установить выход» для рендеринга в серию каналов Unix, которые создают файл PBM, а затем файл PNG.

Конец РЕДАКТИРОВАНИЯ:

Gnu Octave по умолчанию использует gnuplot для построения графиков, и бывает, что gnuplot довольно хорош в создании заполненных многоугольников.Вот некоторые полезные демонстрации именно о таком.Например, вот несколько заполненных полигонов:

# 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

Вот еще один демонстрационный скрипт который рисует сумасшедшее лицо внизу страницы с заполненными кривыми:

# 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top