- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
为了调试,我在 Simulink 的嵌入式 matlab 函数中绘制了一些向量图。在 Matlab R2013b 之前,使用以下最小示例代码一切正常:
function fcn
%#minimum example for plot within for-loop of embedded matlab function
coder.extrinsic('delete');
coder.extrinsic('quiver');
coder.extrinsic('gobjects');
numSteps=4;
persistent hFig;
persistent hVector;
if isempty(hFig)
hFig = figure;
hold on;
hVector=zeros(numSteps,1);
hVector=gobjects(numSteps,1);
for i=1:numSteps
hVector(i) = quiver(0,0,0,0);
end
end
set(0, 'CurrentFigure', hFig);
delete(hVector);
for i=1:numSteps
startInc=[1 1;1 1].*i;
endInc=[2 3;2 -3].*i;
hVector(i) = quiver(startInc(1,:),startInc(2,:),endInc(1,:),endInc(2,:));
end
对于句柄数组 hVector
,由于在 for
循环中使用,因此需要进行初始化。然而,对于图形句柄对象的初始化,需要函数 gobjects
并且反过来用 zeros(numSteps,1)
进行 double 初始化变得必要,因为 matlab 不能正确确定外部函数输出的数据类型。正如我所说,如果将此代码片段复制到 simulink 中的嵌入式 matlab 函数 block 而模型中没有任何其他内容,则该代码片段可以正常工作。
我的问题:Mathworks 在 R2014a 中更改了很多绘图函数,其中一项更改是图形句柄的数据类型,对于我的箭袋图,它不是 quiver
类型。因此,使用 zeros(numSteps,1)
进行的初始化会为句柄数组初始化错误的数据类型。但是,由于上述问题,将其保留下来仍然不起作用。 init 循环或任何类似的编译都不会没有错误。
如果您能就此问题提供帮助,我将不胜感激。
最佳答案
您可以尝试删除 gobject
初始化并使用 double()
将您的调用包装到任何 matlab 图形对象。例如:
hVector(i) = double( quiver(startInc(1,:),startInc(2,:),endInc(1,:),endInc(2,:)) ) ;
我建议阅读 Loren's article关于切换到 HG2 版本的 Matlab 时可能出现的兼容性问题。
它的快速引用更适用于您的问题:
Graphics Functions Return Objects, not Numeric Handles
Prior to R2014b, you could store a set of handles to graphics objects in an array and then add some numeric data to that array. In R2014b, that will cause an error.
[...]
If you find yourself really stuck, it is possible to cast object handles to numeric handles using thedouble
function. You can then cast the number back to an object handle using thehandle
function. We don't recommend this as a long term solution. Be aware that we may choose to remove this feature in a future version of MATLAB. If we do, we'll let you know in advance.
现在,如果您真的必须使用此解决方案,请注意这两个函数都适用于单个元素,但也适用于数组。所以
hVector_HG = handle( hVector_Num ) ; %// works if "hVector_Num" is an array of numeric handles
%// and ...
hVector_Num = double( hVector_HG ) ; %// works if "hVector_HG" is an array of HG2 graphic handles
如果经常需要的话,这可能会简化一种格式或另一种格式之间的往返。
我暂时把它放在帖子的底部,因为开头已经是公认的答案,但请尝试以下操作,让我知道它是否有效。它可能会以更好(更具前瞻性)的方式解决您的问题。
另一种初始化给定图形对象句柄数组的方法是创建一个(空的就足够了)并复制它。例如:
hqNaN = quiver(NaN,NaN) ; %// create an empty quiver
hVector = repmat( hqNaN , numSteps , 1 ) ; %// replicate it in an array
将为您提供一个数组 hVector
,其中包含 numSteps
HG2 图形对象句柄。此时它们都指向同一个对象,但是用相同类型的句柄覆盖每个元素是完全合法的。所以稍后:
hVector(i) = quiver( ... , etc ... ) ; %// overwrite handle "i" with a new quiver plot handle
将(应该)正常工作。
使用这种方法需要注意的几点:
将在何处创建空箭袋?
您可能已经有了一个“当前”数字并且您不希望它被弄乱。如果不是,将创建一个新的空图。所以为了确保空箭袋不会造成问题(只是屏幕上的闪烁),你可以这样包装它:
图; hqNaN = quiver(NaN,NaN) ;关闭(gcf) ;
或者你也可以把它放在一个图形中(它无论如何都是不可见的),以防你需要重新使用这种类型的句柄来进行其他数组初始化。只是不要忘记,一旦关闭图形,或者删除图形对象,hqNaN
变量仍然存在,但它不再是同一类型的句柄(因此不再有用如果您完全想要这种类型,请进行复制)。
删除(hVector)
使用 handle.handle/delete 时出错。对象无效或已删除。
删除(hVector(ishandle(hVector)))
关于matlab - R2014a 或更高版本的 Simulink 中嵌入式 matlab 函数中的图形对象句柄数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29893283/
这个问题困扰了我几天。 这是我的相关 Storyboard布局: 我已经将阳光下的每个布局都设置为所有三个 View Controller ,并且仍然得到一个在横幅 View 上方有一个“间隙”的结果
我正在我的 C++ 程序中嵌入一个网页。我遇到的问题是,在嵌入式页面的 javascript 中,我可以捕获 onkeypress,但不会触发 onkeydown 和 onkeyup。 如果我在非嵌入
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 5年前关闭。 Improve this qu
我有一个 java web 应用程序。我想创建一个嵌入式 LDAP 服务器,当 web 应用程序运行时,我将向 LDAP 插入一些记录,并且有另一个 web 应用程序将访问此 LDAP 以获取信息。可
我正在尝试通过 tomcat maven 插件将 war 部署到嵌入式 tomcat 服务器。控制台显示服务器启动正常。 看来 war 还没有展开。当我访问 http://localhost:9090
假设我有如下函数: bigrams=[(k,v) for (k,v) in dict_bigrams.items() if k[:pos_qu]==selection[:pos_qu
我读过一些关于 python 嵌入式 C++ 的教程。我曾引用过 python 对象。 https://docs.python.org/3/c-api/function.html Python 脚本:
我正在使用嵌入式应用程序,在调试期间,调试器无法解析宏符号(我的理论:因为宏在预处理中丢失了)。我最终不得不先在源代码中找到宏,然后使用定义来监视变量。 我的问题是:有没有办法将宏定义合并到 elf
首先我要说的是我开发的是基于cortex m4的嵌入式设备应用。 我有引导加载程序和主应用程序通用的功能。现在我为引导加载程序和应用程序编译源文件 2 次。但是我的双库 dfu 空间不足,我想在 RO
作为嵌入式 C 编程的初学者,我很好奇每个(根据我的经验)程序执行是如何从 main() 函数开始的?这就像链接器识别 main() 并将那个“特殊” 函数的地址放入重置 vector 指向的地址。
在我的实时嵌入式处理器固件中,我需要十进制数字的格式化打印。标准 printf/sprintf 在工具链中不可用,所以我需要自己实现它。 我使用了除以十并取余的天真方法。但是我的目标处理器本身不支持除
我有编程经验,但在软件开发方面了解不多。我目前正在为我工作的公司编写一个软件,我开始挑战自己代码的可读性。 我想知道这是否是嵌入式 if 语句的“有效”替代方案,或者我是否可以使用更好的方法。 假
我有一个运行嵌入式 Linux 的嵌入式目标,我想计算以下时间: 1) 高速缓存读/写时序2) uncache 内存读/写时序 Linux 中是否有任何标准测试来计算上述时间? 我已经编写了自己的测试
大多数嵌入式设备都是为了在通常资源受限或低规格的设备上执行特定任务而构建的。 因此,大多数嵌入式开发人员需要去除不必要的库和模块,并为其特定设备和用例创建自定义分发。我们先来了解一下嵌入式 Linu
我正在嵌入式处理器上编写一个简单的裸机应用程序。作为此应用程序的一部分,它必须使用 malloc 在大约 256kB 的堆上分配一些内存。注意:最初这是在 main 中静态分配的,但在一定的大小限制下
我正在尝试为我 friend 的婚礼建立一个网站。我使用的是 Bootstrap 5,嵌入的视频没有填满屏幕大小。这是一个 live test page HTML: 您还需要代码吗?我想让视频的全宽
我有一个项目,我尝试为微 Controller 构建固件并尝试更好地控制所使用的优化标志。我想,而不是使用 -O flag 分别指定不同的优化标志。不幸的是,-O 似乎发生了一些优化魔法。我无法使用单
我正在使用双核设备,并且要求核心 A 创建一个数据结构,其中包含在核心 B 上运行的函数列表的参数,定期更新它并通知核心 B。参数和类型的数量可以改变在运行期间。 我的计划如下.. 创建一个 Para
我们有一个 Microsoft.Phone.Controls.WebBrowser内嵌控件 StackPanel , 在 PivotItem 内在 Windows Phone 8 上。以简化的形式,它
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 2 年前。 Improve this ques
我是一名优秀的程序员,十分优秀!