在MATLAB中用非笛卡尔坐标绘制一条线

时间:2016-01-29 01:24:15

标签: matlab graphics line coordinate-systems

MATLAB的surf命令允许您传递指定非笛卡尔x-y分量的可选XY数据。 (它们基本上改变了基础向量)。我希望将类似的参数传递给将绘制一条线的函数。

如何使用非笛卡尔坐标系绘制线?

如果我的术语有点偏,我道歉。这在技术上仍然可能是笛卡尔空间,但是在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])

生成以下图表:

Non-Cartesian Surf

这里,X和Y尺寸不是正交的,也不是等距的。 x中的一个单位可以对应于x方向上的5cm,但x中的下一个单位可以对应于x方向上的2cm + y方向上的1cm。 我希望复制此功能,但绘制一条线而不是冲浪例如,我正在寻找一个函数:

straightLine=[(1:10)' (1:10)'];
my_line(XX,YY,straightLine(:,1),straightLine(:,2))

会生成一条跟踪冲浪图上红色方块的线。

2 个答案:

答案 0 :(得分:1)

我仍然不确定您的输入数据是什么,以及您想要绘制的内容。但是,从你想要绘制它的如何,我可以提供帮助。

致电时

surf(XX,YY,eye(10)); view([0 0 1]);

并且想要仅获得“红色部分”,即函数的最大值,您实际上是使用对角矩阵作为指标来选择XXYY矩阵的子集。因此,您可以手动选择这些点,并使用plot将它们绘制为一条线:

Xplot = diag(XX);
Yplot = diag(YY);
plot(Xplot,Yplot,'r.-');

diag(XX)的调用将采用矩阵XX的对角线元素,当surfz一起使用时,这正是您获取红色补丁的位置根据{{​​1}}的数据。

结果:

result from plot

另外,如果你只是想做你的例子所说的那样,那么就没有必要使用矩阵来最终取出对角线。这是相同的结果,在输入向量上使用元素运算:

eye()

结果: new result

答案 1 :(得分:0)

Matlab有许多内置功能可以帮助您。

在2D中,最简单的方法是polar,它允许您使用thetarho向量制作图表:

theta = linspace(0,2*pi,100);
r = sin(2*theta);
figure(1)
polar(theta, r), grid on

所以,你会得到this. 还有pol2cart功能可将您的数据转换为xy格式:

[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