2013-04-03 2 views
2

В Matlab у меня есть 3D-кривая (массив с 3 координатами), которая пересекает плоскость xy в трехмерной системе координат. «Кривая» - это всего лишь пучок x, y, z точек, и ее форма эллиптическая, которая охватывает пространство 3D и спирали к началу координат. Он несколько раз пересекает плоскость ху, и я хотел бы интерполировать координаты x и y, когда кривая пересекает плоскость xy (т. Е. При z = 0). Как мне это сделать?MATLAB, интерполяция пересечения 3D-кривой xy

+0

Я запутался .. Вы хотите сказать, что у вас есть 3D-массив (массив с 3 координатами), в котором значение at, скажем, 'A (i, j, k)' обозначает значение функции , скажем, 'f (x, y, z)' для 'x = i',' y = j' и 'z = k' (следовательно, 4D-кривая)? Или у вас есть 2D-массив (массив с 2 координатами) с 'f (i, j) = A (i, j)' (отсюда и 3D-кривая)? –

+0

Да, но я не знаю функции. Я просто знаю, что кривая пересекает плоскость ху, когда я рисую ее, используя функцию plot3. И я хочу вычислить координаты, при которых кривая пересекает плоскость ху. –

+0

Итак, вы должны указывать его как «plot3 (X, Y, Z)», где 'X',' Y' и 'Z' являются матрицами одинакового размера? –

ответ

1

Если у вас есть 3 векторов x, y и z с координатами,

crossidx = find(diff(sign(z)) ~= 0); % z(zcross) and z(zcross+1) have different signs 
z1 = z(crossidx); 
z2 = z(crossidx+1); 
dz = z2 - z1; 
alpha = -z1; 
beta = z2; 
xcross = (beta*x(crossidx) + alpha*x(crossidx+1))./dz; 
ycross = (beta*y(crossidx) + alpha*y(crossidx+1))./dz; 
zcross = 0; 
hold on; plot3(xcross, ycross, zcross, '*'); 

Он должен работать либо положительного на отрицательный или отрицательного к положительному переходу. Я написал код, предполагающий только 1 пересечение нуля, но я думаю, что он также работал бы на любое количество переходов.

+0

Это работает. Большое спасибо. –