我刚开始写我的硕士论文,但我对 matlab 的能力/理解已经遇到了麻烦。
问题是,我在行星/月球的表面上有一个轨迹(一个带有时间和坐标的 .mat。然后我有一些带有时间和当时测量值的 .mat。
我可以在 scatter() 中将其绘制为彩色编码轨迹(使用测量值和坐标)。这非常好用。
但是我的问题是我需要更复杂的东西。我现在需要获取轨迹而不是对其进行颜色编码,我应该将测量的图形(值)(为每个点给出)添加到轨迹(并不总是一条直线)。我会添加一个小草图来解释我想要什么。红色箭头显示我想要添加到我的绘图中的内容,绿色显示我拥有的内容。
您始终可以自己转换数据:(使用与@Shai 相同的符号)
x = 0:0.1:10;
y = x;
m = 10*sin(x);
所以你需要的是在每个数据点垂直于曲线的向量:
dx = diff(x); % backward finite differences for 2:end points
dx = [dx(1) dx]; % forward finite difference for 1th point
dy = diff(y);
dy = [dy(1) dy];
curve_tang = [dx ; dy];
% rotate tangential vectors 90° counterclockwise
curve_norm = [-dy; dx];
% normalize the vectors:
nrm_cn = sqrt(sum(abs(curve_norm).^2,1));
curve_norm = curve_norm ./ repmat(sqrt(sum(abs(curve_norm).^2,1)),2,1);
将该向量与测量值 (m
) 相乘,用数据点坐标对其进行偏移即可:
mx = x + curve_norm(1,:).*m;
my = y + curve_norm(2,:).*m;
绘制它:
figure; hold on
axis equal;
scatter(x,y,[],m);
plot(mx,my)
这正是我想要的。这个例子只有一条直线作为坐标,但是这段代码可以很好地处理任何曲线:
x=0:0.1:10;y=x.^2;m=sin(x);
t=0:pi/50:2*pi;x=5*cos(t);y=5*sin(t);m=sin(5*t);
我是一名优秀的程序员,十分优秀!