使matlab的impoly顶点只能在一个维度上移动

时间:2014-10-21 16:37:07

标签: matlab position impoly

Hoi Zamme,

我有一个关于Matlabs impoly函数行为变化的问题。我想修改用户只能沿X轴移动顶点并且Y位置保持不变的移动行为。

我尝试了以下内容:

f = 40*membrane(1,40);r = (1:size(f,2))*5;t = (1:size(f,1))/10;

figure;imagesc(t, r, f); axis xy;hold on; 
plot(t, 100*ones(size(t)), 'g');plot(t, 200*ones(size(t)), 'g')

hp = impoly(gca, [1 100; 5, 200]);
addNewPositionCallback(hp,@(p) setPosition(hp, [p(1,1) 100; p(2,1) 200]))

但似乎新的positionCallback被置于原始回调函数的前面,因为“iptaddcallback”的帮助页面声明:

  

注意......如果已安装回调,则iptaddcallback将替换   使用iptaddcallback回调处理器的回调函数,和   然后将预先存在的回调函数添加到iptaddcallback   名单。 ...

我对Callbacks顺序的假设是正确的,我如何才能实现我的需求?或者是否有更聪明的方法让impoly的顶点只沿x轴移动?

提前致谢!

1 个答案:

答案 0 :(得分:1)

没有找到添加新位置回调的原因不起作用的原因。但是通过设置位置约束来解决我的问题。

f = 40*membrane(1,40);r = (1:size(f,2))*5;t = (1:size(f,1))/10;

figure;imagesc(t, r, f); axis xy;hold on; 
plot(t, 100*ones(size(t)), 'g');plot(t, 200*ones(size(t)), 'g')

hp = impoly(gca, [1 100; 5, 200]);
setPositionConstraintFcn(hp,@(p) [p(:,1), [100; 200]]) % Now the vertex only move along X-axes
BTW:遗憾的是,它再次如此简单......