当前位置:网站首页>Je ne sais pas quoi envoyer pour le festival de la Saint - Valentin. Je t'a i appris à utiliser Matlab pour créer un effet spécial de tirage au sort racleur. Laissez sa main décider de son cadeau.

Je ne sais pas quoi envoyer pour le festival de la Saint - Valentin. Je t'a i appris à utiliser Matlab pour créer un effet spécial de tirage au sort racleur. Laissez sa main décider de son cadeau.

2021-10-14 08:19:15 Slandarer

0Affichage des effets

Le programme fonctionne comme suit: :

Insérer la description de l'image ici
Comme le montre la figure, Maintenez la souris enfoncée et glissez la souris , Les couches peuvent être rayées :

Insérer la description de l'image ici

1 Description du principe du programme

1.1 Établissement des prix

Les paramètres du prix sont écrits dans un cell Dans un tableau cellulaire , La première colonne est un message texte , La deuxième colonne est la probabilité de tirage. :

strSet={
    '520 Un paquet rouge Yuan ',15/100;
        '1314 Un paquet rouge Yuan ',5/100;
        ' Costume de marin en soie noire ',20/100;
        ' Robe de chambre en soie noire ',20/100;
        'Câlin×50Une fois',20/100;
        'Embrasse - moi.×50Une fois',20/100;}; 
probVal=cell2mat(strSet(:,2)); % Extraire les informations de probabilité de la deuxième colonne 

1.2 Échantillonnage aléatoire

Nous convertissons d'abord la fonction de densité de probabilité discrète en fonction de distribution de probabilité :

%  Conversion de la fonction de densité de probabilité en fonction de distribution de probabilité 
for i=2:length(probVal)
    probVal(i)=probVal(i)+probVal(i-1);
end

Par exemple
La densité de probabilité et la distribution de probabilité sont les suivantes: :

Densité de probabilité Distribution des probabilités
0.15 0.15
0.05 0.2
0.2 0.4
0.2 0.6
0.2 0.8
0.2 1

Et si le nombre aléatoire que j'ai tiré était 0.7,0.7 Entre le quatrième et le cinquième nombre de la distribution de probabilité , On pensait que c'était la cinquième option. .Cette section est codée comme suit::

randNum=rand();
numRange=probVal>randNum;
strPos=find(numRange,1);

Assurez - vous que c'est le premier prix pour afficher la chaîne ,Avectext Les fonctions sont affichées dans la zone de coordonnées :

text(300,100,strSet{
    strPos,1},...
    'HorizontalAlignment','center','FontSize',60)

1.3Dessiner une couche

Utiliserimage Dessiner une couleur en gris chaque position est transparente 1Photos de:

coverageMat_C=ones(200,600,3).*0.62;
coverageMat_A=ones(200,600);

coverageHdl=image([0 600],[0 200],coverageMat_C,...
                  'AlphaData',coverageMat_A);

1.4 Curseur de souris

Déterminer si la souris est cliquée
Supposons que nous soyons figureIl s'appellefig, Les paramètres suivants sont définis dans fig Basé sur , D'abord, nous devons déterminer si la souris est pressée. .Nous avons donc mis en place un système appeléisClicking,Et réglez le bouton de la souris et relâchez les deux fonctions de rappel,Quand la souris cliqueisClickingSet totrue,Quand la souris est relâchéeisClickingSet tofalse.

isClicking=false;
set(fig,'WindowButtonDownFcn',@bt_down);
function bt_down(~,~),isClicking=true;end

set(fig,'WindowButtonUpFcn',@bt_up);
function bt_up(~,~),isClicking=false;end

Curseur de souris

Created with Raphaël 2.3.0 La souris glisse Appeler la fonction de rappel La souris est cliquée ? Obtenir la position de la souris Définit la transparence du pixel le plus proche de la position de la souris à 0 yes

Code de cette partie :

[xMesh,yMesh]=meshgrid(1:600,1:200);

set(fig,'WindowButtonMotionFcn',@bt_move);
function bt_move(~,~)
    if isClicking
        mousePos=fig.CurrentPoint;
        boolPos=sqrt((xMesh-mousePos(1)).^2+(yMesh-mousePos(2)).^2)<=15;
        coverageMat_A(boolPos)=0;
        set(coverageHdl,'AlphaData',coverageMat_A)
    end
end

2Code complet

function scratchCard
strSet={
    '520 Un paquet rouge Yuan ',15/100;
        '1314 Un paquet rouge Yuan ',5/100;
        ' Costume de marin en soie noire ',20/100;
        ' Robe de chambre en soie noire ',20/100;
        'Câlin×50Une fois',20/100;
        'Embrasse - moi.×50Une fois',20/100;}; 
probVal=cell2mat(strSet(:,2));
%  Conversion de la fonction de densité de probabilité en fonction de distribution de probabilité 
for i=2:length(probVal)
    probVal(i)=probVal(i)+probVal(i-1);
end


fig=figure('units','pixels');
fig.Position=[300 80 600 200];
fig.NumberTitle='off';
fig.MenuBar='none';
fig.Resize='off';
fig.Name='Gratter';

ax=axes(fig);
ax.Position=[0 0 1 1];
ax.XTick=[];
ax.YTick=[];
ax.ZTick=[];
ax.XLim=[0 600];
ax.YLim=[0 200];
hold(ax,'on')


randNum=rand();
numRange=probVal>randNum;
strPos=find(numRange,1);
text(300,100,strSet{
    strPos,1},...
    'HorizontalAlignment','center','FontSize',60)

coverageMat_C=ones(200,600,3).*0.62;
coverageMat_A=ones(200,600);
[xMesh,yMesh]=meshgrid(1:600,1:200);

coverageHdl=image([0 600],[0 200],coverageMat_C,...
                  'AlphaData',coverageMat_A);

isClicking=false;
set(fig,'WindowButtonDownFcn',@bt_down);
function bt_down(~,~),isClicking=true;end

set(fig,'WindowButtonUpFcn',@bt_up);
function bt_up(~,~),isClicking=false;end
             
set(fig,'WindowButtonMotionFcn',@bt_move);
function bt_move(~,~)
    if isClicking
        mousePos=fig.CurrentPoint;
        boolPos=sqrt((xMesh-mousePos(1)).^2+(yMesh-mousePos(2)).^2)<=15;
        coverageMat_A(boolPos)=0;
        set(coverageHdl,'AlphaData',coverageMat_A)
    end
end


end

Chaque prix et chaque probabilité peuvent être établis par vous - même ,Pas encore.?

版权声明
本文为[Slandarer]所创,转载请带上原文链接,感谢
https://chowdera.com/2021/10/20211013205637671b.html

随机推荐