Ehi! Proprio stanotte, non riuscendo a dormire, mi sono accorto che ci sono delle righe inutili nel codice che ti ho passato (che ovviamente a suo tempo ho provato e funziona). Stamattina le ho modificate, ma siccome non mi hai fatto sapere più niente ho pensato che non ti servissero più e non te le ho mandate. La versione corrente è:
`s = 50; sy = s;(* n. di campioni *)
xmin = -2 Pi; xmax = 2 Pi; ymin = -2 Pi; ymax = 2 Pi; (* dominio *)
out = Flatten[N[Table[{x, y, Sin[Sqrt[x^2 + y^2]]/Sqrt[x^2 + y^2]},
{x, xmin, xmax, (xmax – xmin)/(s – 1)}, {y, ymin, ymax, (ymax – ymin)/(sy – 1)}]], 1] /.
{Indeterminate -> “nan”, ComplexInfinity -> “nan”, Infinity -> “inf”};
OutputForm[TableForm[out[[1 ;; s]], TableSpacing -> {0}]] >> “sombrero.txt”;
For], TableSpacing -> {0}]] >>> “sombrero.txt”]`
A me funziona anche con il .txt, ma ovviamente bisogna aggiungere [tt]z buffer=sort[/tt] per visualizzare correttamente la superficie.
Non so perché a te non funzioni. Io proverei a ridurre il numero di punti ad un valore controllabile ad occhio (es. 5) e vedrei se nel file generato c’è una riga bianca ogni cinque e come variano i valori tra una sezione e l’altra.
Edit: nuova versione del codice Mathematica (su segnalazione di @Marco87)
`s = 50; sy = s;(* n. di campioni *)
xmin = -2 Pi; xmax = 2 Pi; ymin = -2 Pi; ymax = 2 Pi; (* dominio *)
out = Flatten[N[Table[{x, y, Sin[Sqrt[x^2 + y^2]]/Sqrt[x^2 + y^2]},
{x, xmin, xmax, (xmax – xmin)/(s – 1)}, {y, ymin, ymax, (ymax – ymin)/(sy – 1)}]], 1] /.
{Indeterminate -> “nan”, ComplexInfinity -> “nan”, Infinity -> “inf”};
$file = OpenWrite[“sombrero.dat”, BinaryFormat -> True];
Export[$file, out[[1 ;; s]], “Table”];
For[i = 2, i <= s, i++,
WriteString[$file, "\n\n"]
Export[$file, out[[1 + (i - 1)*s ;; i*s]], "Table"]]
Close[$file];`
Ciao
Corrispondente codice MATLAB:
`s = 50; sy = 50; % numero di campioni
xmin = -2*pi; xmax = 2*pi; ymin= -2*pi; ymax = 2*pi; % dominio
x = linspace(xmin, xmax, s);
y = linspace(ymin, ymax, sy);
[X,Y] = meshgrid(x,y);
Z = sin(sqrt(X.^2+Y.^2))./sqrt(X.^2+Y.^2);
x = reshape(X, 1, numel(X));
y = reshape(Y, 1, numel(Y));
z = reshape(Z, 1, numel(Z));
dati = [x; y; z];
fid = fopen('sombrero.txt', 'w');
for i = 1:s
fprintf(fid, '%f %f %f\n', dati(:,1+(i-1)*s:i*s));
fprintf(fid, '\n');
end
fclose(fid);`