为什么line()并不总是返回线对象?为什么有时似乎返回两倍?

安东·罗登豪瑟

我知道line(X,Y)命令返回一个线对象。那就是为什么我不理解以下代码:

myline=line([1 2],[1 1]);
x=[];
x(2,2)=myline

返回x = [0 0; 0 7.0001]为什么?为什么是7.0001?为什么x(2,2)不是线对象?

isfloat(x(2,2))  %this returns true
isgraphics(x(2,2),'line')  %this also  returns true!
set(x(2,2),'LineStyle','--')  %this works fine
x(2,2)+1    %this also works fine!

x(2,2)如何同时是float和line对象?为何在开始时会浮动?

如果对这个问题的回答冗长而复杂,那么我也很高兴仅链接到解释了此行为的某个地方。(我知道从技术上讲,这些不只是一个问题。但是在我看来,它们都属于同一个人并且有相同的答案)

埃德里克

您在这里看到的是MATLAB分配规则与新旧手柄图形系统之间的兼容性层的结合。

首先,当您对数组进行赋值时(包括在数组的“尾端”赋值时),该数组的类型永远不会改变-而是转换右侧的类型(如果可能)匹配您要分配到的数组。在你的情况下,通过执行x = [],你正在做x是一个0x0类型的数组double分配给(2,2)元素时,line对象将转换为double

可以将line对象转换为double的事实是为了与MATLAB的手柄图形的旧实现兼容。原始的手柄图形系统是在MATLAB具有功能齐全的面向对象的编程系统之前开发的,因此line,所有图形对象都由唯一的双精度数字表示,而不是像对象之类的东西在新系统中,为了保持与旧代码的向后兼容性,仍然可以将line对象等视为双精度数字。

您可以通过调用明确地看到此行为

double(myline)

如果需要,可以使用gobjects分配一个空的图形占位符数组:

myline = line([1 2],[1 1])
x = gobjects(0);
x(2,2) = myline;
class(x(2,2)) % gets 'matlab.graphics.primitive.Line'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么计数连接的列时,MySQL COUNT返回的是我期望值的两倍?

为什么 Selenium driver.find 命令返回的列表是它应有的两倍?

为什么datetime对象有时返回日期,有时返回日期和时间?

Laravel-为什么json响应有时返回数组有时是对象

为什么 (My)SQL 中的 Sum() 函数返回的值是我期望的两倍?

为什么 PersistentObjectSpace 有时返回一个代理,有时返回一个对象?

为什么IntStream.average()总是返回正确的结果,而LongStream.average()有时却不返回正确的结果?

为什么函数有时返回0,有时返回false?

为什么此Powershell函数有时返回列表,而有时返回XmlElement?

为什么recyclerView的findviewbyposition()有时仅返回null

为什么 Guild.get_channel 有时在 discord.py 中返回无对象

Function.prototype.toString()并不总是返回有效的JS。为什么?

为什么签到canva对象(Tcl / Tk 8.5)时信息为什么总是返回0

为什么max()有时返回nan而有时忽略它?

为什么open(“ url”)有时返回File有时是StringIO?

为什么instanceof有时不编译,有时返回false?

为什么Ruby Procs有时会返回而有时却是错误?

为什么我的Shapes.Line尺寸是我希望在Canvas上的尺寸的两倍?

为什么59.95可以精确存储成两倍?

为什么 Listview 中的图像设置了两倍?

R:为什么c(4,4)是两倍?

JTextField接受两倍的输入,但是为什么呢?

为什么浮点数333.50是两倍

为什么Xcode的大小几乎变成两倍?

图像的长度和宽度是两倍,为什么?

为什么mysql_fetch的总和是两倍?

为什么QSpinBox跳了两倍的步进值

为什么 a=a*100 比 a*=100 快两倍?

为什么/ home的大小是预期的两倍?