2016-07-08 1 views
0

Je cherche à utiliser PathIterator sur une zone dans MATLAB afin de stocker les sommets dans un tableau, et l'int retourné semble être correct, mais je n'arrive pas à obtenir les coordonnées pour retourner correctement (the field coords in the online documentation).Utilisation de PathIterator de Java dans MATLAB

Dans la ligne de commande à des fins de test:

myArea = 
[email protected] 

AT = java.awt.geom.AffineTransform(); 

PI = myArea.getPathIterator(AT) 
PI = 
[email protected] 

coords = zeros(1,6); 

PI.currentSegment(coords) 
ans = 
0 

PI.next() 
PI.currentSegment(coords) 
ans = 
1 

Et selon la documentation, les sommets doivent être stockés dans le tableau coords, mais le tableau ne change pas.

J'ai essayé de déclarer une colonne comme un tableau java dans MATLAB, mais currentSegment (coords) ne fonctionnera pas du tout. Serait-ce un problème avec myArea étant un domaine plutôt qu'un chemin?

Répondre

0

Vous avez rencontré l'une des limitations les plus ennuyeuses de l'interaction Matlab-Java. Matlab automatically converts Java primitives et tableaux, tels que double/float de et vers des types numériques Matlab. Cela vous permet de passer un tableau float[] à la méthode java (mais pas un tableau vide, qui sera passé comme null à la place!), Mais il le ferait en passant une référence à la copie qu'il crée. Ainsi, même si la méthode java modifie cette copie par référence, votre tableau d'origine dans Matlab n'est jamais modifié.

Malheureusement, il n'est pas possible d'utiliser une telle méthode java telle quelle. Votre seule option est d'écrire une méthode de wrapper java personnalisée autour d'elle. Vous devez soit renvoyer le tableau explicitement, soit exposer Float[] à Matlab (c'est-à-dire non-primitif, qui ne serait en aucun cas converti par Matlab) au lieu de float[], en convertissant dans le wrapper. La façon de choisir est principalement une question de préférence personnelle.