Рисование и заливка разных полигонов одновременно в MATLAB

У меня есть код ниже. Он загружает файл CSV в память. Этот файл содержит координаты для разных многоугольников. Каждая строка этого файла имеет координаты X, Y и строку, которая сообщает, какому многоугольнику принадлежит эта точка данных. например, многоугольник с именем «Poly1» со 100 точками данных имеет в этом файле 100 строк, например:

Poly1,X1,Y1
Poly1,X2,Y2
...
Poly1,X100,Y100
Poly2,X1,Y1
.....

В файле index.csv указано количество точек данных (количество строк) для каждого многоугольника в файле Polygons.csv. Эти детали не важны. Дело в том, что я могу успешно извлечь точки данных для каждого многоугольника, используя приведенный ниже код. Однако, когда я рисую, линии разных полигонов соединяются друг с другом, и сюжет выглядит паршиво. Мне нужно, чтобы полигоны были разделены (хотя они связаны и перекрывают некоторые области). Я думал, что с помощью «заливки» я смогу их лучше разглядеть. Но «заливка» просто заполняет каждый многоугольник, который он может найти, а это нежелательно. Я хочу заливать только внутри многоугольников. Кто-нибудь может мне помочь? Я также могу отправить вам свои данные, если необходимо, они меньше 200 Кб. Спасибо

 
[coordinates,routeNames,polygonData] = xlsread('Polygons.csv');
index = dlmread('Index.csv');
firstPointer = 0
lastPointer = index(1)
for Counter=2:size(index)
    firstPointer = firstPointer + index(Counter) + 1
    hold on
    plot(coordinates(firstPointer:lastPointer,2),coordinates(firstPointer:lastPointer,1),'r-')
    lastPointer = lastPointer + index(Counter)
end



person Hossein    schedule 31.05.2010    source источник


Ответы (2)


Это решение может сработать для вас:

[coordinates,routeNames,polygonData] = xlsread('Polygons.csv');  %# Load the data
for polyName = unique(routeNames(:).')       %'# Loop over unique polygons
  polyIndex = ismember(routeNames,polyName);  %# Find index of polygon points
  x = coordinates(polyIndex,:);               %# Get x coordinates
  y = coordinates(polyIndex,:);               %# Get y coordinates
  patch(x,y);                                 %# Plot a patch
  hold on;                                    %# Add to the existing plot
end

Это создает многоугольники с помощью функции PATCH. Чтобы раскрасить пятна по-другому, ознакомьтесь с этим MATLAB документация.

person gnovice    schedule 31.05.2010
comment
я получаю эту ошибку: ??? Неопределенная функция или метод 'eq' для входных аргументов типа 'cell'. Ошибка в == ›testPoly при 4 polyIndex = routeNames == polyName; % # Найти индекс точек многоугольника - person Hossein; 01.06.2010
comment
@ Амро: Спасибо. Я набрал его слишком быстро и пропустил. ;) Теперь должно работать. - person gnovice; 01.06.2010

Я думаю, что patch - лучший инструмент для рисования закрашенных многоугольников. Оцените!

person Jay    schedule 31.05.2010