2016-09-27 4 views
-1

У меня есть данные в узлах трехмерного треугольника, и мне нужно интерполировать, чтобы получить данные внутри треугольника.Линейная интерполяция внутри трехмерного треугольника

вот что я пытался сделать:

x=[0,1,0]; 
y=[1,0,1]; 
z=[0,2,-1]; 
[X,Y,Z]=meshgrid(x,y,z); 
v=[2,5,-1]; 
xs=linspace(0,1,.1); 
ys=linspace(0,1,.1); 
zs=linspace(-1,2,.1); 
Vs = interp3(X,Y,Z,v,xs,ys,zs,'linear'); 

я получаю сообщение об ошибке: Количество входных координат массивов не равно числу измерений (NDIMS) этих массивов.

что не так?

ответ

1

. Пусть X содержит координаты x ваших узлов, Y y-координаты, Z z-координаты ваших узлов. Сохраните значение/данные на своих узлах в V. Теперь вы можете указать, где вы хотите интерполировать данные, сохраняя x, y и z-координаты этих точек в Xs, Ys и Zs. Значение данных в этих точках:

Vs = interp3(X,Y,Z,V,Xs,Ys,Zs,'linear'); 

Вы посмотрите на Matlab documentation может.

Редактировать: Когда вы добавили свой код: Ошибка в том, что размер вашего V неверен. Если вы посмотрите на пример Matlab Docu -> interp3 -> Evaluate за пределами домена X, Y и Z, вы увидите, что V должен иметь размер как X, Y и Z вместе взятых. Из документации: size(V) = [length(Y) length(X) length(Z)] для векторов X, Y и Z.

Вот пример:

X = linspace(-1,2,5); 
Y = linspace(-1,7,23); 
Z = linspace(3,9,23); 
V = rand(23,5,23); 

xq = linspace(0,1,34); 
yq = linspace(0,2,34); 
zq = linspace(4,5,34); 
vq = interp3(X,Y,Z,V,xq,yq,zq,'linear',-1); 
+0

X Y и Z должны быть сеточные с помощью meshgrid? Xs Ys Zs должны быть векторами? – user2600366

+0

X, Y и Z также могут быть векторами (документация Matlab -> interp3 -> входные аргументы). Таким образом, X (1) является координатой x вашего первого узла, X (2) вашего второго узла, .... То же самое касается Y и Z. – StefanM

+0

То же самое для Xs, Ys и Zs они также могут быть векторами. – StefanM

Смежные вопросы