Pergunta

Eu vi lotes de superfície 3D de dados antes, mas eu não sei o que software eu poderia usar para fazê-lo.

Eu tenho 3 séries de dados (X, Y, Z), basicamente, eu quero cada uma das linhas na tabela para ser um ponto no espaço 3D, todos unidos como uma malha. Os dados são actualmente CSV, mas eu posso mudar o formato, como é dados i gerados mim mesmo.

alguém pode ajudar

Foi útil?

Solução

Se seus x e y pontos mentir topologicamente em uma grade, então você pode usar MESH. Eles não precisam ter o mesmo espaçamento; apenas precisam de ser organizado de modo que x (r: r + 1, c: c + 1) e y (r: r + 1, c: c + 1) definir um quadrilátero no seu malha, para cada linha r e coluna c.

Se os dados não mentem em uma grade, mas você sabe o que os rostos deve ser, olhada na função PATCH.

Se você só tem pontos e você não sabe nada sobre a superfície, você precisa primeiro resolver o problema reconstrução da superfície . Eu tenho COCONE usado; existem outros pacotes bons lá também. Depois de ter a superfície reconstruída, então você pode usar PATCH para exibi-lo.

Outras dicas

Você olhou para usando vtk ? Se você tem Matlab, então você deve ser capaz de usar plot3d ou de surf com meshgrid e gridData para gerar superfície 3D parcelas ou remendo como sugerido por Sr. . Fooz .

gnuplot ou scilab

Abaixo está um script para SciLab que eu escrevi algum tempo atrás. Lê-se em três colunas separadas por separadores. Você pode facilmente mudar isso para atender às suas necessidades, bastante auto-explicativas. Aqui está um guia rápido para leitura / escrita em scilab eo eu referência abaixo é aqui :

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top