Matlab毒药和数字

Twi*_*wig 3 variables matlab plot image screen-capture

3 Matlab问题

1 - 有没有人知道是否有相应的

#pragma GCC poison variable_name
Run Code Online (Sandbox Code Playgroud)

在matlab中,即如果它在代码中发现从此时开始使用variable_name,则会导致matlab错误?

另外两个不太相关的问题,因为我仍然无法相信.

2 - 无论如何都要链接命令

imagesc(I1_avg_crop, [bg_value multiplier2*std_value+bg_value]);
Run Code Online (Sandbox Code Playgroud)

除了做之外,特别是一个数字

set(0,'CurrentFigure',fig3);
imagesc(I1_avg_crop, [bg_value multiplier2*std_value+bg_value]);
Run Code Online (Sandbox Code Playgroud)

它之前呢?

3 - getframe()(或者类似的)实际上可以在图中找到什么而不是"做一个屏幕捕获"?,因为当图形窗口被移动时它不能很好地工作?

(我正在编辑某些代码,我是matlab的新手,所以如果这些都是愚蠢的问题我会事先道歉,它只是我找不到我想要的文档)

编辑:额外问题手册说

set(0,'CurrentFigure',h);
Run Code Online (Sandbox Code Playgroud)

使数字h为当前,但不会相对于其他数字改变其可见性或堆叠.这仍然适用于Mac OS X,因为它似乎仍然迫使它​​成为顶级?

Jon*_*nas 8

(1)不,不可能"本地"毒害变量.但是,您可以执行以下解决方法:定义这样的类:

classdef poison 
   properties (SetAccess=private)
      varName
   end
   methods
     function obj = poison(varName)
        obj.varName = varName;
     end
     function delete(obj)
        error('attempting to overwrite ''%s''',obj.varName)
     end
   end
end
Run Code Online (Sandbox Code Playgroud)

然后你可以调用variable_name = poison('variable_name')并获得相同的效果 - 如果variable_name被覆盖,它会触发对象的delete方法并抛出错误,如果有尝试索引,或者在算术操作中,则存在一般错误.

(2)您可以axHandle = axes('Parent',fig3);在函数调用中显式设置图像的父级(传递轴句柄,您可以通过它获取),这样可以避免调用图形.但是,您不能这样做设置色彩映射缩放.因此,你必须要么使用

imshow(I1_avg_crop,[bg_value multiplier2*std_value+bg_value],'Parent',axHandle);
Run Code Online (Sandbox Code Playgroud)

或者,如果您没有访问图像处理工具箱,则需要使用 image

image(I1_avg_crop, 'CDataMapping','scaled','Parent',axHandle);
set(axHandle,'clim',[bg_value multiplier2*std_value+bg_value])
Run Code Online (Sandbox Code Playgroud)

(3)如果getframe使用轴手柄调用,它应该能够捕获轴的内容 - 除非您将图形移动到第二个屏幕上,在这种情况下它将无法工作.顺便说一句:我注意到getframe过去在OSX上存在问题,例如对接数字.

(4)Matlab有时会出现OSX特有的问题,因为它们仍在调试一些非常基本的东西(OSX版本曾经是在X-Windows上运行的Linux版本,他们一直在努力改变这是最近几年).