Question

J'ai déjà vu des graphiques de surface en 3D, mais je ne sais pas quel logiciel je pourrais utiliser pour le créer.

J'ai 3 séries de données (X, Y, Z). En gros, je veux que chacune des lignes de la table soit un point dans un espace 3D, toutes jointes en tant que maillage. Les données sont actuellement au format csv, mais je peux modifier le format car ce sont les données que j'ai générées moi-même.

Quelqu'un peut-il aider

Était-ce utile?

La solution

Si votre x & amp; y points topologiquement se trouvent sur une grille, vous pouvez alors utiliser MESH. Ils n'ont pas besoin d'avoir un espacement égal; ils ont juste besoin d'être organisés pour que x (r: r + 1, c: c + 1) et y (r: r + 1, c: c + 1) définissent un quadrilatère sur votre maillage, pour chaque ligne r et colonne c.

Si vos données ne se trouvent pas sur une grille, mais que vous savez quelles sont les faces, consultez la fonction PATCH.

Si vous avez seulement des points et que vous ne connaissez rien à la surface, vous devez d'abord résoudre le problème reconstruction de surface problème. J'ai utilisé cocone; il y a aussi d'autres bons paquets. Une fois que vous avez la surface reconstruite, vous pouvez utiliser PATCH pour l’afficher.

Autres conseils

Avez-vous envisagé d'utiliser vtk ? Si vous avez Matlab, vous devriez pouvoir utiliser plot3d ou surf avec meshgrid et griddata pour générer une surface 3D parcelles ou correctifs comme suggéré par Mr . Fooz .

gnuplot ou scilab

Vous trouverez ci-dessous un script pour SciLab que j'ai écrit il y a quelque temps. Il se lit en trois colonnes séparées par des onglets. Vous pouvez facilement changer cela pour répondre à vos besoins, assez explicite. Voici un guide rapide pour lire / écrire dans scilab et le premier. La référence ci-dessous est ici :

function plot_from_file(datafile)
//
// Make a simple x-y-z plot based on values read from a datafile.
// We assume that the datafile has three columns of floating-point
// values seperated by tabs.

  // set verbose = 1 to see lots of diagnostics
  verbose = 1;

  // open the datafile (quit if we can't)
  fid = mopen(datafile, 'r');
  if (fid == -1) 
    error('cannot open datafile');
  end

  // loop over all lines in the file, reading them one at a time
  num_lines = 0;
  while (true)

    // try to read the line ...
    [num_read, val(1), val(2), val(3)] = mfscanf(fid, "%f\t%f\t%f");
    if (num_read <= 0)
      break
    end
    if (verbose > 0)
      fprintf(1, 'num_lines %3d  num_read %4d \n', num_lines, num_read);
    end
    if (num_read ~= 3) 
      error('didn''t read three points');
    end

    // okay, that line contained valid data.  Store in arrays
    num_lines = num_lines + 1;
    x_array(num_lines) = val(1);
    y_array(num_lines) = val(2);
    z_array(num_lines) = val(3);
  end

  // now, make the plot
  plot3d2(x_array, y_array, z_array);
  // close the datafile
  mclose(fid);

endfunction
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top