[MatLab] - Spostare linea assi

Lory314
Ciao a tutti!!!!
Avrei bisogno un aiuto. Vorrei disegnare una funzione a bolla definita su un triangolo. In particolare è un polinomio di terzo grado che sia annulla sui lati del triangolo avente vertici (0,0,0), (0,1,0) e (1,0,0).
Il disegno l'ho ottenuto con il seguente codice
x = linspace(0,1,1000);
y = linspace(0,1,1000);
[X,Y] = meshgrid(x,y);
Z = 27.*X.*Y.*(1-X-Y).*(Y <= 1-X);
surf(X,Y,Z);
hold on
plot3([1 0],[0 1],[0 0],'-w')

shading flat
hold on
grid off
axis([0 1 0 1 0 1])

xlabel('x','FontSize',14)
ylabel('y','FontSize',14)
zlabel('z','FontSize',14)
set(gca,'FontSize',14,'LineWidth',2)

e cancellando brutalmente a mano con paint la parte blu fuori dal triangolo. Diciamo che a parte l'uso di paint (o in generale di un altro editor di immagini) il risultato è accettabile. Il mio problema è che, come si può notare dalla figura, l'illusione ottica è che la bolla sia "alzata" dal piano (x,y). Questa illusione a mio parere sparisce se si pone l'asse y in modo che lo zero dell'asse y coincida con lo zero dell'asse x. Guardando l'immagine questo consiste nello spostare l'asse y verso l'alto. Mi chiedo se c'è un modo per ottenere questo direttamente in MatLab. Inoltre mi chiedo se c'è un modo per evitare di utilizzare un editor di immagini per togliere la parte fuori dal triangolo. Penso che questo si possa fare utilizzando comandi tipo fill, ma non riesco. In ogni caso questo penso sia un problema secondario.

Qualcuno può aiutarmi?

Grazie

Risposte
Lory314
Non ho risolto completamente il problema ma sono riuscito a migliorare notevolmente l'aspetto togliendo quella fastidiosa illusione ottica ed evitando l'uso di paint grazie all'uso dei Nan. Posto il codice nel caso possa essere utile a qualcuno.
figure
x = linspace(0,1,1000);
y = linspace(0,1,1000);
[X,Y] = meshgrid(x,y);
Z = 27.*X.*Y.*(1-X-Y).*(Y <= 1-X);
[ii,jj]=find(Z==0);
for i=1:length(ii)
    if(jj(i) > 1 - ii(i))
       Z(ii(i),jj(i))=NaN; 
    end
end
surf(X,Y,Z);
shading flat
hold on
plot3([1 0],[0 1],[0 0],'-k','LineWidth',2)
plot3([0 0],[0 1],[0 0],'-k','LineWidth',2)
plot3([0 1],[0 0],[0 0],'-k','LineWidth',2)
plot3([1 0],[1 1],[0 0],'-k','LineWidth',2)

hold on
grid off

axis([0 1 0 1 0 1])
view(54,28)
xlabel('x','FontSize',14)
ylabel('y','FontSize',14)
zlabel('z','FontSize',14)
set(gca,'FontSize',14,'LineWidth',2)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.