パリオリンピックで使われた例のあれ

※本抽選は厳正に行われています。(+90kg固定)

% ステップ1: 文字列入力
segments = cell(1, 6);
segments{1} = '+50kg';
segments{2} = '+60kg';
segments{3} = '+70kg';
segments{4} = '+80kg';
segments{5} = '+90kg';
segments{6} = '+100kg';

% セグメントごとの固定色
colors = lines(6);  % MATLABの既定のカラーマップから色を取得

% ステップ2: ルーレットの作成と表示
theta = linspace(0, 2*pi, 7); % 6つのセグメント + 1 (閉じるため)
x = cos(theta);
y = sin(theta);
figure;
fill(x, y, 'w'); % ルーレットの背景を白にする
hold on;

% セグメントの描画と文字列の表示
for k = 1:6
    fill([0 x(k) x(k+1)], [0 y(k) y(k+1)], colors(k, :));
    text(0.5*(x(k)+x(k+1)), 0.5*(y(k)+y(k+1)), segments{k}, ...
        'HorizontalAlignment', 'center', 'FontSize', 16);
end

axis equal off;

% ステップ3: ルーレットの回転と停止位置の制御
stop_position = 4;

% ルーレットの回転アニメーション
for angle = linspace(0, 2*pi*5, 100) % 5回転のアニメーション
    rotateRoulette(angle, segments, colors);
    pause(0.05);
end

% 最終位置に回転
final_angle = pi/3 * (stop_position-1); % 指定位置を上に
rotateRoulette(final_angle, segments, colors);

function rotateRoulette(angle, segments, colors)
    % 回転行列を適用してルーレットを描画
    clf;
    theta = linspace(0, 2*pi, 7);
    x = cos(theta + angle);
    y = sin(theta + angle);
    fill(x, y, 'w');
    hold on;
    
    for k = 1:6
        fill([0 x(k) x(k+1)], [0 y(k) y(k+1)], colors(k, :));
        text(0.5*(x(k)+x(k+1)), 0.5*(y(k)+y(k+1)), segments{k}, ...
            'HorizontalAlignment', 'center', 'FontSize', 16);
    end
    
    axis equal off;
end

コメント

タイトルとURLをコピーしました