보통 streamtube
과 streamline
은 벡터 필드에서 작동합니다. 특히 MATLAB에서는 구조화 된 메쉬 (즉, meshgrid
에서 생성 된 것)에서만 작동합니다.
구조화되지 않은 벡터 필드가 있지만, 이미 실제로 유선형이 계산 된 궤도 집합이 있으므로 실제 궤도는 유선형입니다 (벡터 필드를 궤도의 파생물로 정의).
기본적으로`plot3 '을 사용하여 유선형을 그릴 수 있습니다.
clear all
close all
x = [];
y = [];
z = [];
Px = [];
Py = [];
Pz = [];
figure(1)
for i=1:10
a= rand;
b= rand;
zz{i} = 0:pi/50:10*pi;
yy{i} = a*zz{i}.*sin(zz{i});
xx{i} = b*zz{i}.*cos(zz{i});
px{i}=[0,diff(xx{i})];
py{i}=[0,diff(yy{i})];
pz{i}=[0,diff(zz{i})];
plot3(xx{i},yy{i},zz{i});
hold all;
XYZ{i} = [xx{i}',yy{i}',zz{i}'];
x = [x, xx{i}];
y = [y, yy{i}];
z = [z, zz{i}];
Px = [Px, px{i}];
Py = [Py, py{i}];
Pz = [Pz, pz{i}];
end
figure(2)
streamtube(XYZ)
[X,Y,Z] = meshgrid(linspace(min(x),max(x),10),linspace(min(y),max(y),10),linspace(min(z),max(z),10));
PX = griddata(x,y,z,Px,X,Y,Z);
PX(isnan(PX)) = 0;
PY = griddata(x,y,z,Py,X,Y,Z);
PY(isnan(PY)) = 0;
PZ = griddata(x,y,z,Pz,X,Y,Z);
PZ(isnan(PZ)) = 0;
figure(3)
streamtube(X,Y,Z,PX,PY,PZ,zeros(1,10),zeros(1,10),linspace(min(z),max(z),10))
이 스크립트 10 개 궤도의 집합을 생성하고 또한 streamtube
와 plot3
와 유선 줄거리 : 내가 제대로 문제를 이해하면
그런 다음 솔루션은 다음과 같다. 그러나 streamtube
는 관을 가진 선을 대체하는 정확하게 동일한 일을 정확하게한다. 원하는 경우 각 튜브의 너비를 설정할 수도 있습니다.
griddata
함수를 사용하여 비정형 벡터 필드를 구조화 된 벡터 필드로 변환 할 수도 있습니다. 그러나이 경우 결과는 궤도의 방법과 개수에 따라 달라집니다. 전 두 가지 방법을 선호합니다. 거대한 양의 궤적을 갖고 있고 모든 것을 단일 튜브에 넣고 싶다면 세 번째 방법을 사용할 수 있습니다.
이 답변을 귀하의 질문에 알려주십시오.
알레산드로
당신은 바로 여기에
streamtube
w = sqrt(px.^2 + py.^2 + pz.^2);
hh = streamtube({ [xx; yy; zz]' }, {w'});
set(hh, 'EdgeColor', 'none');
에 정점을 삽입하는 옵션을 사용할 수 있습니다
확인을 무엇을 얻을 MATLAB 버전) – nkjt
내가 가지고 있지만, 문제는 streamtube (또는 유선형) 함수가 입력으로 전체 3D 벡터 필드 만 허용한다는 것입니다 (즉, meshgrid에서 얻을 수 있음). –