Domanda

Ho già visto trame 3D di dati di superficie ma non so quale software potrei usare per realizzarlo.

Ho 3 serie di dati (X, Y, Z) in pratica voglio che ciascuna delle righe sul tavolo sia un punto nello spazio 3d, tutte unite come una mesh. I dati sono attualmente CSV, ma posso cambiare il formato, in quanto sono i dati che ho generato da me.

Qualcuno può aiutare

È stato utile?

Soluzione

Se la tua x & amp; y i punti si trovano topologicamente su una griglia, quindi puoi usare MESH. Non hanno bisogno di avere una spaziatura uniforme; devono solo essere organizzati in modo tale che x (r: r + 1, c: c + 1) e y (r: r + 1, c: c + 1) definiscano un quadrilatero sulla mesh, per ogni riga r e colonna c.

Se i tuoi dati non si trovano su una griglia, ma sai quali dovrebbero essere le facce, guarda la funzione PATCH.

Se hai solo punti e non sai nulla della superficie, devi prima risolvere problema di ricostruzione della superficie . Ho usato il cocone; ci sono anche altri buoni pacchetti lì. Una volta che hai la superficie ricostruita, puoi usare PATCH per visualizzarla.

Altri suggerimenti

Hai provato a utilizzare vtk ? Se hai Matlab, dovresti essere in grado di usare plot3d o surf con meshgrid e griddata per generare superfici 3D grafici o patch come suggerito da Mr . Fooz .

gnuplot o scilab

Di seguito è riportato uno script per SciLab che ho scritto qualche tempo fa. Legge in tre colonne separate da schede. Puoi facilmente cambiarlo per adattarlo alle tue esigenze, piuttosto autoesplicativo. Ecco una guida rapida per leggere / scrivere in scilab e quello Il riferimento di seguito è qui :

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top