2010-05-31 129 views
1

我有下面的代码。它将一个CSV文件加载到内存中。这个文件包含不同多边形的坐标。这个文件的每一行都有X,Y坐标和一个字符串,它告诉这个数据点属于哪个多边形。在MATLAB中同时绘制和填充不同的多边形

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

的index.csv文件具有数据点(行数)的数量为在文件Polygons.csv每个多边形:例如名为“POLY 1”与100个数据点polygone在此文件等具有100行。这些细节并不重要。问题是: 我可以使用下面的代码成功提取每个多边形的数据点。 但是,当我绘制不同多边形的线相互连接并且情节看起来很糟糕。我需要将多边形分开(它们连接并重叠某些区域)。我认为通过使用“填充”我可以更好地看到它们。但是“填充”只是填充它可以找到的每个多边形,这是不可取的。我只想填充多边形内部。有人能帮我吗?如果有必要,我还可以向您发送我的数据点,它们小于200Kb。 感谢

 

[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

我收到此错误: ???对于'cell'类型的输入参数,未定义的函数或方法'eq'。 错误==> testPoly at 4 polyIndex = routeNames == polyName; %#查找多边形点的索引 – Hossein 2010-05-31 21:31:12

+1

尝试'ismember(routeNames,polyName)'而不是.. – Amro 2010-05-31 21:48:53

+0

@Amro:谢谢。我输入它太快,错过了。 ;)它现在应该工作。 – gnovice 2010-05-31 22:43:04