2010-05-31 2 views
1

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

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

Файл index.csv имеет количество (точки данных число строк) для каждого полигона в файле Polygons.csv , Эти детали не важны. Дело в том, что: Я могу успешно извлечь данные для каждого многоугольника, используя приведенный ниже код. Однако, когда я рисую линии разных полигонов, они связаны друг с другом, и сюжет выглядит дерьмовым. Мне нужны полигоны, которые нужно разделить (они связаны и перекрывают некоторые области). Я подумал, что, используя «заливку», я действительно вижу их лучше. Но «fill» просто заполняет каждый многоугольник, который он может найти, и это нежелательно. Я хочу только заполнить полигоны. Кто-нибудь может мне помочь? Я также могу отправить вам свой datapoint, если это необходимо, они меньше 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 

 

ответ

1

Я думаю patch это лучший инструмент для рисования заполненных полигонов. Check it out!

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. Чтобы покрасить патчи по-разному, посмотрите this MATLAB documentation.

+0

Я получаю эту ошибку: ??? Неопределенная функция или метод 'eq' для входных аргументов типа 'cell'. Ошибка в ==> testPoly при 4 polyIndex = routeNames == polyName; % # Найти указатель точек полигона – Hossein

+1

попробуйте 'ismember (routeNames, polyName)' вместо .. – Amro

+0

@Amro: Спасибо. Я набрал его слишком быстро и пропустил это. ;) Теперь он должен работать. – gnovice

Смежные вопросы