MATLAB的surf
命令允许您传递指定非笛卡尔x-y分量的可选X
和Y
数据。 (它们基本上改变了基础向量)。我希望将类似的参数传递给将绘制一条线的函数。
如何使用非笛卡尔坐标系绘制线?
如果我的术语有点偏,我道歉。这在技术上仍然可能是笛卡尔空间,但是在x方向上的一个单元在y方向上与一个单元正交的意义上它不是 square 。如果你能纠正我的术语,我真的很感激!
编辑:
下面更好地说明了我的意思:
命令:
datA=1:10;
datB=1:10;
X=cosd(8*datA)'*datB;
Y=datA'*log10(datB*3);
Z=ones(size(datA'))*cosd(datB);
XX=X./(1+Z);
YY=Y./(1+Z);
surf(XX,YY,eye(10)); view([0 0 1])
生成以下图表:
这里,X和Y尺寸不是正交的,也不是等距的。 x中的一个单位可以对应于x方向上的5cm,但x中的下一个单位可以对应于x方向上的2cm + y方向上的1cm。 我希望复制此功能,但绘制一条线而不是冲浪例如,我正在寻找一个函数:
straightLine=[(1:10)' (1:10)'];
my_line(XX,YY,straightLine(:,1),straightLine(:,2))
会生成一条跟踪冲浪图上红色方块的线。
答案 0 :(得分:1)
我仍然不确定您的输入数据是什么,以及您想要绘制的内容。但是,从你想要绘制它的如何,我可以提供帮助。
致电时
surf(XX,YY,eye(10)); view([0 0 1]);
并且想要仅获得“红色部分”,即函数的最大值,您实际上是使用对角矩阵作为指标来选择XX
,YY
矩阵的子集。因此,您可以手动选择这些点,并使用plot
将它们绘制为一条线:
Xplot = diag(XX);
Yplot = diag(YY);
plot(Xplot,Yplot,'r.-');
对diag(XX)
的调用将采用矩阵XX
的对角线元素,当surf
与z
一起使用时,这正是您获取红色补丁的位置根据{{1}}的数据。
结果:
另外,如果你只是想做你的例子所说的那样,那么就没有必要使用矩阵来最终取出对角线。这是相同的结果,在输入向量上使用元素运算:
eye()
答案 1 :(得分:0)
Matlab有许多内置功能可以帮助您。
在2D中,最简单的方法是polar
,它允许您使用theta
和rho
向量制作图表:
theta = linspace(0,2*pi,100);
r = sin(2*theta);
figure(1)
polar(theta, r), grid on
所以,你会得到this.
还有pol2cart
功能可将您的数据转换为x
和y
格式:
[x,y] = pol2cart(theta,r);
figure(2)
plot(x, y), grid on
这看起来会略微different
然后,如果我们将其扩展为3D,则只剩下plot3
。所以,如果您有以下数据:
theta = linspace(0,10*pi,500);
r = ones(size(theta));
z = linspace(-10,10,500);
您需要使用带有3个参数的pol2cart
来生成this:
[x,y,z] = pol2cart(theta,r,z);
图(3)
plot3(x,y,z),网格
最后,如果你有球形数据,那么你有sph2cart
:
theta = linspace(0,2*pi,100);
phi = linspace(-pi/2,pi/2,100);
rho = sin(2*theta - phi);
[x,y,z] = sph2cart(theta, phi, rho);
figure(4)
plot3(x,y,z),grid on
view([-150 70])
看起来this way