2010-11-19 6 views
3

ボールをバウンスさせようとしていますが、基本的なマルチカラーボールの作成に問題があります。各フレームで全体を回転させることができます。私は8つのセクターに分割されたボールの円周上の512ポイントを持って、それぞれ別の色です。これまでは、ボールの円周に沿った点のx座標とy座標を表す2つの行列が8x64であり、それぞれの行はそれぞれのセクタです。MATLABのセクタを着色する

サークルに沿ってこれらの「範囲」を埋める方法を知りたいので、2つの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

関数は(x、y)は、各点の角度が利用可能である極座標系へ系(デカルト座標)を座標変換することによって始めることができます。関連するMATLAB関数はcart2pol

極性にな形質転換した後、あなたは8つのセクタにポイントを分割するために床を使用することができます...何かをあなたがPATCHdraw_ballとを作成したいfloor(polar_anle_in_radians/(2*pi)*8)

2

のラインに沿っています。これを行う最も良い方法は、データを面や頂点として保存する必要がありますが、8×N配列を維持したい場合は、代わりにボールを表す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 
関連する問題