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.
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
@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. –