我正在尝试为一个球弹跳动画但是在创建一个基本的多色球时遇到问题,然后我可以在每个帧中作为一个整体旋转。我在球的圆周上有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
答案 0 :(得分:2)
您想要使用draw_ball
创建PATCH。最好的方法是要求你将数据存储为面和顶点,但如果你想保留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
答案 1 :(得分:0)
该功能可以通过将(x,y)坐标系(笛卡尔坐标系)转换为极坐标系来开始,其中每个点的角度都可用。相关的matlab函数是cart2pol
转换为极地之后,您可以使用地板将点分成8个扇区... floor(polar_anle_in_radians/(2*pi)*8)