我想插入一个数据集,但给定的X可以有多个Y' s,如下所示:
A(:,1:2,1)=
95.2343 70.6159
96.4501 71.5573
97.4430 72.7315
98.9743 72.8699
100.0470 71.7690
100.3872 70.2699
100.7797 68.7837
102.1478 68.0814
103.6851 68.0521
105.0307 68.7966
105.8972 70.0666
106.7177 71.3665
107.7095 72.5416
108.9175 73.4924
110.3574 74.0309
111.8943 73.9859
113.3936 73.6446
114.6645 72.7794
115.5911 71.5522
116.2426 70.1591
116.3922 68.6286
116.3503 67.0914
116.7771 65.6147
117.9045 64.5692
119.4065 64.2425
120.9432 64.2923
122.2526 65.0975
122.9486 66.4682
122.8841 68.0043
122.5492 69.5051
122.2403 71.0109
122.0819 72.5402
这些是沿着蛇体的点,从上到下的视频数字化。他们的姿势经常会导致每个X有2个或更多Y点,并且因为他们需要保持一致的XY框架时(通常非常显着)转动,我不能只旋转我的X和Y.
我可以使用cscvn
制作样条线函数,使用fnplt
绘制时看起来很棒!但是当我尝试使用ppval
来获取值时,这一切都变成了废话,我得到的两条曲线看起来就像蛇或fnplt
中显示的内容。
图片在这里: http://imgur.com/aYJ0Ftj
我想要的只是为这些点拟合曲线,并将该曲线转换为一系列可能200个XY点。
我假设有一些非常简单的回答,有些命令我从未在我的搜索中出现,但我找不到它的生命。这远远超出了我通常的技能(我更习惯于爬过沼泽地捕捉任何鳞片状或粘糊糊的东西),所以我确定我忽略了一些对熟练的MATLAB用户来说非常明显的东西。 / p>
谢谢!
答案 0 :(得分:4)
也许这就是你已经尝试过的,但评论有点小,所以这里有一个可以帮助你的想法
x = [1 2 3 4 5 6 7 6 5];
y = [1 4 4 3 2 2 2 3 4];
t = 1:length(x);
figure; plot(x,y)
xx = interp1(t,x,1:.01:length(x),'pchip');
yy = interp1(t,y,1:.01:length(x),'pchip');
hold on; plot(xx,yy,'g')
我通过插入x和y作为t的函数来避免对interp的唯一值限制。
答案 1 :(得分:0)
好的,多亏了Yvon和Trogdor,我设法粗略地将一些代码拼凑在一起:
ht=[1:32];
tx=linspace(1,32,500);
m=ht;
m(2:3,:)=squeeze(A(:,:,i))';
m1=m(1,:);
m2=m(2,:);
m3=m(3,:);
SFX=spline(m1,m2);
pSFX=ppval(SFX,tx);
SFY=spline(m1,m3);
pSFY=ppval(SFY,tx);
AS(:,1,i)=pSFX;
AS(:,2,i)=pSFY;
plot(AS(:,1,i),AS(:,2,i),'Marker','o');
它充满了无意义的变量,步骤和冗余,但我是一名解剖学家,所以这让我感到舒服(严肃地说,谷歌'喉返神经')。
如何为所有人添加声誉?