1 svar
69 visningar
elikamedmc2 är nöjd med hjälpen
elikamedmc2 119
Postad: 15 okt 2021 04:55

Hur skapar jag en kontinuerligt uppdaterande "pie chart"?

Hej,

Jag ska försöka skapa ett diagram, behöver egentligen inte något speciellt diagram, som procentuellt visar hur stor del av ytan som är täckt, allt eftersom ytan täcks. Det är en figur som med vald vinkel ska täcka en yta. Koden som finns ser ut såhär:

 

---------------

x = 3.0;

y = 3.0;

 

theta = 20;

xt = cosd(theta);

grass = [0 0.7 0.2

         0.4 0.6 0

         0.4 0.2 0];

     

A = ones(30, 20);

A(:, 1) = 2; %B1 = A(:,1);

A(:,20) = 2; %B2 = A(:,20);

A(30,:) = 2; %B3 = A(30,:); 

A(1,:) = 2; %B4 = A(1,:); 

%A(2,2) = 0;

 

imagesc(A)

colormap(grass)

axis equal

 

 

 

    while sum(A, 'all') > 192 

        

            if A(round(y),round(x)+2) == 2

                

                xt = -cosd(theta);

            

            elseif A(round(y),round(x)-2) == 2

               

                xt = cosd(theta);

            end

        

            

            if A(round(y)+2,round(x)) == 2

                theta = -abs(theta);

                

            

            elseif A(round(y)-2,round(x)) == 2

                theta = abs(theta);

                

            end

            

    x = x + xt;

    y = y + sind(theta);

 

    A(round(y),round(x+1)) = 0;

    A(round(y),round(x-1)) = 0;

    A(round(y+1),round(x)) = 0;

    A(round(y-1),round(x)) = 0;

    A(round(y+1),round(x-1)) = 0;

    A(round(y+1),round(x+1)) = 0;

    A(round(y-1),round(x-1)) = 0;

    A(round(y-1),round(x+1)) = 0;

    

        disp("x = "+x+"  y = "+y)

 

 

        imagesc(A)

        axis equal

        pause(0.0001)

                

        

    end

    disp(x+" Done "+y)

 

---------------

 

Jag tänker mig att det på något vis ska gå att, procentuellt, sätta in antalet nollor (vilket är vad matrisen täcks med, allt eftersom att figuren omvandlar dem från ettor till nollor), i pie-funktionen. Något i den här stilen:

Pie(numel(0)/numel(0)*100);

Tänker jag superkonstigt här? 

Fastnar lite här och får inte det att funka med koden... 

Mvh, 

Matsmats 567 – Livehjälpare
Postad: 15 okt 2021 12:58 Redigerad: 15 okt 2021 12:59

Är det en robotklippare som är ute och kör?

Tolkar det som att du vill räkna andelen nollor i matrisen.

Om du tar en matris, säg a=[0 0 0.1 0; 0 0.1 0 0] och sedan gör a(:) så får du alla element i a fast i form av en kolumnvektor.

Om du sedan tar logical(a==0) så får du en kolumnvektor med elementen 1 där det sitter nollor i kolumnvektorn a(:).

Lycka till!

Svara Avbryt
Close