Окраска секторов в MATLAB - PullRequest
       2

Окраска секторов в MATLAB

3 голосов
/ 20 ноября 2010

Я пытаюсь оживить подпрыгивающий шар, но у меня возникают проблемы при создании базового многоцветного шара, который я могу вращать целиком в каждом кадре. У меня 512 точек на окружности шара, разделенного на 8 секторов, каждый из которых имеет свой цвет. До сих пор у меня есть 2 матрицы размером 8x64, представляющие координаты x и y точек по окружности шара, каждая из строк является собственным сектором.

Я хочу знать, как заполнить эти «диапазоны» по кругу, чтобы он выглядел как пляжный мяч, создавая функцию для этого с двумя матрицами координат x и y в качестве входных данных. Ваша помощь будет принята с благодарностью!

Основная функция скелета:

% Expects 8xN x and y point matrices
function draw_ball(x,y)
% Draw the 8 sectors filling them with unique colors

end

Ответы [ 2 ]

2 голосов
/ 20 ноября 2010

Вы хотите создать PATCH с draw_ball. Лучший способ сделать это - сохранить данные в виде граней и вершин, но если вы хотите сохранить свои массивы 8xN, вы можете вместо этого создать 8 патчей, описывающих шар.

Таким образом, ваша функция будет выглядеть так:

function pH = drawBall(x,y)

%# count sectors
nSectors = size(x,1);

%# create a colormap
ballColors = jet(nSectors);

%# set hold-state of current axes to 'on'
set(gca,'nextPlot','add')

%# initialize array of plot handles
pH = zeros(nSectors,1);

%# add [0,0] to every sector
x = [x,zeros(nSectors,1)];
y = [y,zeros(nSectors,1)];

%# plot patches
for s = 1:nSectors
   %# plot sectors with black lines. If there shouldn't be lines, put 'none' instead of 'k' 
   pH(s) = patch(x(s,:),y(s,:),ballColors(s,:),'EdgeColor','k');
end
0 голосов
/ 20 ноября 2010

Функция может начинаться с преобразования системы координат (x, y) (декартовой) в полярную систему координат, где доступен угол каждой точки.Связанная функция Matlab: cart2pol

После преобразования в полярное поле вы можете использовать пол, чтобы разбить точки на 8 секторов ... что-то вроде floor(polar_anle_in_radians/(2*pi)*8)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...