Как установить edgecolor таким же, как facecolor при рисовании полигонов в matlab?

#matlab #matlab-figure #polygons

#matlab #matlab-рисунок #полигоны

Вопрос:

Я строю много полигонов с помощью команды fill .

 fill(X1,Y1,1)
fill(X2,Y2,2)
...
 

Я хочу установить цвет края таким же, как цвет лица. Что мне нужно для этого сделать?

Я строю много полигонов, и мне нужно найти способ установить цвет края таким же, как и цвет лица. Даже цвета лица мне неизвестны.

Я должен использовать числа, потому что я строю данные.

Комментарии:

1. разве вы не можете просто установить для своих цветов краев значение none?

2. Нет, я хочу, чтобы он был таким же, как facecolor

3. но в чем разница, если он совпадает с facecolour, вы не сможете его увидеть, поэтому вы можете получить тот же эффект, просто не отображая цвета краев

4. Я знаю. Но рядом с полигоном есть пустое пространство, и я думаю, что если я установлю для edgecolor значение facecolor и увеличу ширину края, я смогу заполнить эти пробелы.

Ответ №1:

Я не понимаю, что не так с предложением CitizenInsane, но если вы просто хотите сохранить некоторый код, вы могли бы использовать небольшую вспомогательную функцию:

 FillItLikeIWant = @(x,y,color) fill(x, y, color, 'EdgeColor',color)

FillItLikeIWant(x,y,'r')
 

В качестве альтернативы вы можете заранее определить все свои «стили», вот как я обычно делаю это с линейными графиками, в таком массиве:

 myStyles = {{'r','EdgeColor','r'};
            {'b','EdgeColor','b'};
            {'g','EdgeColor','g'}}
 

а затем перебирать стили:

 for ii = 1:3
    fill(x,y,myStyles{ii}{:}); hold on
end
 

Редактировать:

Я не знаю, что должно делать единственное число 1 или 2 в вашем примере fill(X1,Y1,1) , но, возможно, вы хотите создать и использовать цветовую карту, подобную этой:

 N = 500;
Cmap = colormap(jet(N));
 

Теперь используйте вспомогательную функцию, и каждый полигон получит другой цвет Cmap .

 for ii = 1:500
    h{ii} = FillItLikeIWant(x,y,Cmap(ii,:));
end
 

вы можете отслеживать все цвета только по индексам. В качестве альтернативы сохраните дескрипторы каждого отдельного полигона.
Таким образом, впоследствии вы можете получить цвет многоугольника по его дескриптору:

 get(h{500},'FaceColor')

ans =

        0.504            0            0
 

что совпадает с:

 Cmap(500,:)

ans =

        0.504            0            0
 

Комментарии:

1. Мне нужно 500 разных цветов.

2. Есть ли какой-нибудь способ узнать цвет, заполненный полигоном, когда я рисую его таким образом: fill(X, Y, 2) . Какому цвету соответствует это 2?

3. что должно указывать 2 ? это ничего не делает?

Ответ №2:

Просто установите EdgeColor пару свойство / значение с тем же цветом, что и грани:

 t = (1/16:1/8:1)'*2*pi;
x = sin(t);
y = cos(t);
fill(x, y, 'r', 'EdgeColor', 'r');
 

Пример кода для рисования нескольких полигонов с разными цветами в цикле for (с использованием текущей цветовой карты):

 function [] = foo()
%[
    cmap = colormap; % Use some colormap to have different color for polygons
    ccount = size(cmap, 1); % Number of elements in the colormap

    figure; % Create a figure
    hold on; % Avoids deleting previous polygons

    pcount = 50; % number of polygons
    for i = 1:pcount,

        % Create randomly translated polygon
        t = (1/16:1/8:1)'*2*pi;
        x = 0.1*sin(t)   rand;
        y = 0.1*cos(t)   rand;

        % Select a color in the colormap
        colorIndex = mod(i, ccount);
        if (colorIndex == 0), colorIndex = ccount; end       
        colorValue = cmap(colorIndex, :);

        % Draw the polygon
        fill(x, y, colorValue, 'EdgeColor', colorValue);

    end
%]
end
 

Комментарии:

1. Извините, я забыл упомянуть, я имею дело с большим количеством полигонов, и я не могу установить цвет края каждого многоугольника. Я строю их в цикле, и мне нужно установить edgecolor таким же, как facecolor в самом цикле.

2. @Tanuj ?! Находится ли fill в цикле или нет, не имеет значения ? ! … Можете ли вы опубликовать небольшой пример цикла, чтобы мы могли лучше понять, что здесь беспокоит??

3. пример: ‘для i = 1:100 fill (X_i, Y_i, i) end’ X_i — это всего лишь сокращение для X1, X2 … Теперь я хочу установить edgecolor таким же, как facecolor.

4. ^^ извините, я не знаю, как добавить код в комментарии. пожалуйста, постарайтесь понять

5. Кроме того, я знаю, что не могу использовать X_i или Y_i. Это просто для того, чтобы рассказать вам, что я делаю