- Questo topic ha 0 risposte, 1 partecipante ed è stato aggiornato l'ultima volta 11 anni fa da .
-
Topic
-
Credo che la soluzione sia alquanto ovvia (e forse ho capito anche più o meno il punto della guida in cui cercare) ma non ho ancora trovato risposta.Ebbene semplicemente il surf plot non viene come dovrebbe venire. L’immagine che allego, confrontando con il risultato di Matlab evidenzia il problema: è come se le “linee” a y=cost venissero stampate in ordine da y=-1 (più “fuori lo schermo”) a y=+1 (più “dentro lo schermo”), il che comporta che le seconde coprono le prime invece che viceversa. Ho pensato a [mesh/ordering=x varies], ma non cambia nulla. O lo uso male..
Un esempio funzionante è il seguente (ci sono pacchetti superflui in quanto uso questo standalone come banco di prova per provare nuove “cose”)
`\documentclass{standalone}
\usepackage{xcolor}
\usepackage[utf8]{inputenc}
\usepackage{amsmath,amsfonts}
\usepackage{bm}
\usepackage{calc}
\usepackage{tikz}
\usetikzlibrary{decorations}
\usetikzlibrary{calc}
\usetikzlibrary{patterns}
\usepackage{tikzscale}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}\newcommand{\mat}{\mathbf}
\renewcommand{\vec}{\bm}\begin{document}
\begin{tikzpicture}
\begin{axis}[title={Prova surf},xlabel={$x$},ylabel={$y$},zlabel={$z$},view={10}{20},mesh/ordering=x varies]
\addplot3[surf,mesh/rows=21] table[x=x,y=y,z=z] {data.dat};
\end{axis}
\end{tikzpicture}\end{document}`
Qui c’è il file data.dat e, nel caso possano essere utile, le righe di codice Matlab per produrlo sono le seguenti:
`[X,Y] = meshgrid(-1:.1:1,-1:.1:1);
Z = X.*Y+ exp(-X.*X*10-Y.*Y*10);
surf(X,Y,Z)
fid = fopen('data.dat','w');
fprintf(fid,'%c\t%c\t%c\n','x','y','z');
fprintf(fid,'%f\t%f\t%f\n',[X(:) Y(:) Z(:)]');
fclose(fid)`Ops, scusate, il problema era banalmente che tentavo di risolvere con l’opzione mesh/ordering=x varies invece che con mesh/ordering=y varies.
Devo eliminare il post? 😕
- Devi essere connesso per rispondere a questo topic.