#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. Это просто для того, чтобы рассказать вам, что я делаю