Если ваш многоугольник выпуклый , вы можете просто вычислить выпуклую оболочку из вершин, используя функцию CONVHULL и построить полигон с помощью функции построения PATCH, Например:
x = [0 1 0 1]; %# Unordered x coordinates of vertices
y = [0 1 1 0]; %# Corresponding y coordinates of vertices
hullIndices = convhull(x,y); %# Gives vertex indices running counterclockwise
%# around the hull
patch(x(hullIndices),y(hullIndices),'r'); %# Plot the polygon in red
Если вместо этого ваш полигон вогнутый , это становится сложнее. Вам придется изменить порядок линий ребер самостоятельно, сравнив их конечные точки и упорядочив их по часовой стрелке или против часовой стрелки.
... но если это кажется слишком большой работой для кодирования, вы можете обойти проблему, создав ограниченную триангуляцию Делоне точек вершин, найти треугольники внутри ограниченные ребра , затем нарисуйте эти отдельные треугольники, которые образуют многоугольник, используя PATCH . Например:
x = [0 1 0 1 0.5]; %# Unordered x coordinates of vertices
y = [0 1 1 0 0.5]; %# Corresponding y coordinates of vertices
edgeLines = [1 3;... %# Point 1 connects to point 3
1 4;... %# Point 1 connects to point 4
2 3;... %# Point 2 connects to point 3
2 5;... %# Point 2 connects to point 5
5 4]; %# Point 5 connects to point 4
dt = DelaunayTri(x(:),y(:),edgeLines); %# Create a constrained triangulation
isInside = inOutStatus(dt); %# Find the indices of inside triangles
faces = dt(isInside,:); %# Get the face indices of the inside triangles
vertices = [x(:) y(:)]; %# Vertex data for polygon
hPolygon = patch('Faces',faces,...
'Vertices',vertices,...
'FaceColor','r'); %# Plot the triangular faces in red
Выше будет отображаться многоугольник с линиями ребер вокруг каждого вложенного треугольника, который его формирует. Если вы просто хотите, чтобы линия ребра отображалась вокруг внешней части всего многоугольника, вы можете добавить следующее:
set(hPolygon,'EdgeColor','none'); %# Turn off the edge coloring
xEdge = x(edgeLines).'; %'# Create x coordinates for the edge
yEdge = y(edgeLines).'; %'# Create y coordinates for the edge
hold on; %# Add to the existing plot
line(xEdge,yEdge,'Color','k'); %# Plot the edge in black