Arrays MATLAB,穿越xy平面的三维曲线插值

Arrays MATLAB,穿越xy平面的三维曲线插值,arrays,matlab,indexing,Arrays,Matlab,Indexing,在Matlab中,我有一条三维曲线(3个坐标的数组),它在三维坐标系中穿过xy平面。“曲线”只是一组x、y、z点,其形状为椭圆形,跨越3D空间,并向原点螺旋。它多次穿过xy平面,我想在曲线与xy平面相交时(即z=0)插值x和y坐标。我该怎么做呢?假设你有3个带坐标的向量x,y,和z crossidx = find(diff(sign(z)) ~= 0); % z(zcross) and z(zcross+1) have different signs z1 = z(crossidx); z2 =

在Matlab中,我有一条三维曲线(3个坐标的数组),它在三维坐标系中穿过xy平面。“曲线”只是一组x、y、z点,其形状为椭圆形,跨越3D空间,并向原点螺旋。它多次穿过xy平面,我想在曲线与xy平面相交时(即z=0)插值x和y坐标。我该怎么做呢?

假设你有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个零交叉,但我认为它也适用于任意数量的交叉。

我很困惑。。你的意思是说你有一个3D数组(有3个坐标的数组),其中的值,比如说,
a(i,j,k)
表示函数的值,比如说,
f(x,y,z)
表示
x=i
y=j
z=k
(因此是4D曲线)?或者你更喜欢一个二维数组(两个坐标的数组)和
f(i,j)=a(i,j)
(因此是一条三维曲线)?是的,但我不知道函数。使用plot3函数绘制曲线时,我只知道曲线与xy平面相交。我想计算曲线与xy平面相交的坐标。所以,你必须给出类似于“plot3(X,Y,Z)
,其中,
X
Y`和
Z
是相同大小的矩阵,对吗?等等。。因为您使用的是plot3,“曲线”只是一条直线?不,“曲线”只是一组x、y、z点,它的形状是椭圆形的,横跨整个3D空间,并向原点呈螺旋状。它多次穿过xy平面,我想在曲线与xy平面相交时(即z=0)插值x和y坐标。