3 축 그래프를 메쉬로 플로팅하십시오
문제
나는 이전에 3D 표면 데이터를 보았지만 어떤 소프트웨어를 만들 수 있는지 모르겠습니다.
나는 3 개의 일련의 데이터 (x, y, z)를 가지고 있습니다. 기본적으로 테이블의 각 행이 3D 공간의 포인트가되기를 원하며 모두 메쉬로 연결됩니다. 데이터는 현재 CSV이지만 직접 생성 한 데이터이므로 형식을 변경할 수 있습니다.
누구나 도울 수 있습니다
해결책
X & Y가 점수로 그리드에 놓이면 메쉬를 사용할 수 있습니다. 그들은 간격을 가질 필요가 없습니다. x (r : r+1, c : c+1) 및 y (r : r+1, c : c+1)가 메쉬의 사변형을 정의하도록 구성해야합니다. 각 행 R과 열에 대해 정의해야합니다. 씨.
데이터가 그리드에 있지 않지만 얼굴이 무엇인지 알고 있다면 패치 기능을보십시오.
포인트 만 있고 표면에 대해 아무것도 모르는 경우 먼저 해결해야합니다. 표면 재건 문제. 나는 Cocone을 사용했습니다. 다른 좋은 패키지도 있습니다. 재구성 된 표면이 있으면 패치를 사용하여 표시 할 수 있습니다.
다른 팁
gnuplot 또는 스클 랩
아래는 내가 한동안 썼던 Scilab을위한 스크립트입니다. 탭으로 분리 된 세 열에서 읽습니다. 당신은 당신의 요구에 맞게 이것을 쉽게 바꿀 수 있습니다. 다음은 빠른 가이드입니다 Scilab의 읽기/쓰기 그리고 아래에서 내가 참조하는 것은입니다 여기:
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
제휴하지 않습니다 StackOverflow