2016-07-02 2 views
2

Dans le cadre d'un code MATLAB Artificial Neural Network, je veux trouver les points les plus proches de deux polygones convexes.Comment trouver les points les plus proches entre deux coques convexes dans MATLAB?

je vis

dsearchn(X,T,XI) 
commande Description de

here, mais qui trouve des points les plus proches entre deux ensembles de points et des polygones (comme convexs) ont des points de infinites.

Alors pouvez-vous suggérer un moyen/une idée?

Remarque: J'utilise MATLAB 2014a. J'ai la coordonnée du point de sommet de chaque convexe.

+1

Il y a une fonction à ce ceci sur [File Exchange] (https://www.mathworks.com/matlabcentral/fileexchange/22444-minimum-distance-between-two-polygons) qui va le faire . Comme noté dans les commentaires, la complexité de cette fonction est 'O (mn)' alors que la complexité minimale est connue pour être 'O (logm + logn)' (voir [Edelsbrunner] (https: //users.cs.duke. edu/~ edels/Papers/1985-J-02-ComputingExtremeDistances.pdf)). – beaker

+0

@beaker oui, j'ai trouvé cette fonction avant de le dire et avec un petit changement de code, ça a donné ma réponse. Merci pour votre temps. –

Répondre

1

Avec This File dans l'échange de fichiers, j'ai trouver la solution.

Avec une petite modification de code, j'ai dessiné une bissectrice perpendiculaire que je voulais. Bien sûr, cette façon prend du temps.

enter image description here

2

Si vous n'êtes pas satisfait de ce qui est prévu par dsearchn, puis, si je vous, je ferais une des deux suivantes:

  • Trouver les plus proches voisins sur les sommets (par exemple qui sommet le polygone A est le NN d'un sommet donné du polygone B).
  • Choisissez un point aléatoire à l'intérieur du polygone A (vous pouvez calculer la coque convexe de A, mais vous pouvez ignorer cela et ne prendre en compte que les sommets que vous connaissez déjà). Ce point aléatoire est la requête. Trouver un NN de ce point à partir des sommets du polygone B.

Vous voudrez peut-être demander à Software recommendation s pour plus.


Edit:

Une autre approche est la suivante:

Créer un ensemble de données représentant du polygone A. Définissez la taille de l'ensemble de données vous et le remplir avec des échantillons de points qui se trouvent à l'intérieur du polygone. Choisissez-les uniformément au hasard dans le polygone.

Ensuite, prendre un point de polygone B (soit un sommet ou un point aléatoire dans le polygone B) et c'est le point d'interrogation, pour lequel vous rechercherez dans l'ensemble de données représentant du polygone voisin le plus proche (s) A.

Bien sûr, c'est juste une approximation, mais je ne peux pas penser à autre chose maintenant.

Notez que vous pouvez bien sûr faire la même chose pour le polygone B.

+0

La première façon n'est pas ma réponse - en fait je n'ai pas utilisé la commande dsearchn parce que je ne voulais pas trouver les sommets les plus proches - j'ai besoin d'une réponse exacte. La deuxième manière a le même problème. Mais vraiment merci pour votre temps @gsamaras. –

+0

@pooriahaddad ouais je sais, mais je voulais essayer! J'ai mis à jour ma réponse, j'espère que ça aide. Au fait, bonne question, j'ai eu mon +1! – gsamaras

+0

Votre dernière approche suggérée semble efficace. J'ai trouvé une solution dans l'échange de fichiers, mais votre approche semble avoir besoin de moins de temps pour résoudre le problème. Vous avez mon +1, merci; –