Я хочу создать многоугольник, используя данные края (координаты X, Y каждой точки края), который является неупорядоченным, и я хочу заполнить этот многоугольник каким-либо цветом.
Любые предложения, как я могу это сделать?
Я хочу создать многоугольник, используя данные края (координаты X, Y каждой точки края), который является неупорядоченным, и я хочу заполнить этот многоугольник каким-либо цветом.
Любые предложения, как я могу это сделать?
Если ваш многоугольник выпуклый, вы можете просто вычислить выпуклую оболочку из вершин, используя функцию CONVHULL и начертите многоугольник с помощью функции построения графика ИСПРАВЛЕНИЕ. Например:
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
Если вместо этого ваш полигон вогнутый, это становится сложнее. Вам придется самостоятельно изменить порядок краевых линий, сравнив их конечные точки и расположив их либо по часовой стрелке, либо против часовой стрелки.
... но если вам кажется, что для написания кода слишком много работы, вы можете обойти эту проблему, создав ограниченная триангуляция Делоне точек вершин, найти треугольники внутри ограниченных ребер, затем нанесите эти отдельные треугольники, образующие многоугольник, с помощью ИСПРАВЛЕНИЕ. Например:
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
Я думаю, вы ищете функцию patch()
. С его помощью можно создавать двухмерные и трехмерные полигоны.