[MatLab] - Spostare linea assi
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
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
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
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)