在MATLAB中使用Java的PathIterator

时间:2016-07-08 12:58:46

标签: java matlab java-api

我希望在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是一个区域而不是路径的问题吗?

1 个答案:

答案 0 :(得分:0)

您遇到了Matlab-Java交互中最烦人的限制之一。 Matlab automatically converts java原语和数组,例如double / float来自和来自Matlab的数值类型。这允许您将float[]数组传递给java方法(但不是一个空数组,它将作为null传递!),但它会通过传递对的引用来实现复制它创建。因此,即使java方法通过引用修改此副本,Matlab中的原始数组也永远不会更改。

不幸的是,不可能使用这样的java方法。您唯一的选择是围绕它编写自定义java包装器方法。您可能需要显式返回数组,或者将Float[]暴露给Matlab(即非原始的,不会被Matlab以任何方式转换)而不是float[],在内部来回转换包装。选择哪种方式主要取决于个人偏好。