我希望在MATLAB中的某个区域使用PathIterator,以便将顶点存储在数组中,并且返回的int似乎是正确的,但我似乎无法正确返回坐标({{ 3}})。
在用于测试目的的命令行中:
myArea =
java.awt.geom.Area@c506df7
AT = java.awt.geom.AffineTransform();
PI = myArea.getPathIterator(AT)
PI =
java.awt.geom.AreaIterator@56118528
coords = zeros(1,6);
PI.currentSegment(coords)
ans =
0
PI.next()
PI.currentSegment(coords)
ans =
1
根据文档,顶点应存储在coords数组中,但数组不会改变。
我尝试在MATLAB中将coords声明为java数组,但是currentSegment(coords)根本不会运行。这可能是myArea是一个区域而不是路径的问题吗?
答案 0 :(得分:0)
您遇到了Matlab-Java交互中最烦人的限制之一。 Matlab automatically converts java原语和数组,例如double
/ float
来自和来自Matlab的数值类型。这允许您将float[]
数组传递给java方法(但不是一个空数组,它将作为null
传递!),但它会通过传递对的引用来实现复制它创建。因此,即使java方法通过引用修改此副本,Matlab中的原始数组也永远不会更改。
不幸的是,不可能使用这样的java方法。您唯一的选择是围绕它编写自定义java包装器方法。您可能需要显式返回数组,或者将Float[]
暴露给Matlab(即非原始的,不会被Matlab以任何方式转换)而不是float[]
,在内部来回转换包装。选择哪种方式主要取决于个人偏好。