Рисование и заливка разных полигонов одновременно в MATLAB - PullRequest
1 голос
/ 31 мая 2010

У меня есть код ниже. Он загружает файл 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


Ответы [ 2 ]

2 голосов
/ 31 мая 2010

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

[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 .

1 голос
/ 31 мая 2010

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

...