2016-07-02 7 views
2

Im Teil eines Matlab-Codes des künstlichen neuralen Netzes möchte ich die nächsten Punkte von zwei konvexen Polygonen finden.Wie findet man in MATLAB die nächsten Punkte zwischen zwei konvexen Hüllen?

Ich sah

dsearchn(X,T,XI) 

Beschreibung Befehl here, aber das findet am nächsten Punkten zwischen zwei Gruppen von Punkten und Polygone (wie Convexs) hat Unendlichkeiten Punkte.

Also können Sie irgendeinen Weg/Idee vorschlagen?

Hinweis: Ich verwende MATLAB 2014a. Ich habe die Koordinate jedes konvexen Scheitelpunktes.

+1

Es gibt eine Funktion, dies zu dieser auf [File Exchange] (https://www.mathworks.com/matlabcentral/fileexchange/22444-minimum-distance-between-two-polygons), dass dies zu tun . Wie in den Kommentaren erwähnt, ist die Komplexität dieser Funktion 'O (mn)', während die minimale Komplexität 'O (logm + logn)' ist (siehe [Edelsbrunner] (https: //users.cs.duke. edel/~ edels/Papiere/1985-J-02-ComputingExtremeDistances.pdf)). – beaker

+0

@baker ja, ich habe diese Funktion gefunden, bevor Sie sagen und mit ein wenig Code ändern, das gab meine Antwort. Vielen Dank für Ihre Zeit. –

Antwort

1

Mit This File in File Exchange, habe ich die Lösung finden.

Mit ein wenig Code-Änderung, habe ich eine senkrechte Winkelhalbierende gezeichnet, die ich wollte. Natürlich ist dieser Weg zeitaufwendig.

enter image description here

2

Wenn Sie nicht zufrieden mit dem, was von dsearchn vorgesehen ist, dann, wenn ich du wäre, würde ich eine von zwei folgenden Möglichkeiten:

  • Finden nächsten Nachbarn auf den Eckpunkten (zum Beispiel, das Scheitel von Polygon A ist die NN eines gegebenen Eckpunkts von Polygon B).
  • Wählen Sie einen zufälligen Punkt in Polygon A (Sie möchten vielleicht die konvexe Hülle von A berechnen, aber Sie können das überspringen und nur die Ecken berücksichtigen, die Sie bereits kennen). Dieser zufällige Punkt ist die Abfrage. Finden eine NN von diesem Punkt aus den Eckpunkten des Polygons B.

Möglicherweise möchten Sie in Software recommendation s um mehr bitten.


Edit:

Ein anderer Ansatz ist dies:

erstellen repräsentativen Datensatz von Polygon A. die Größe des Datensatzes Setzen Sie sich und füllen Sie es mit Proben von Punkten, die innerhalb des Polygons liegen. Wähle sie gleichmäßig innerhalb des Polygons.

Dann nehmen Sie einen Punkt von Polygon B (entweder eine Ecke oder einen beliebigen Punkt innerhalb Polygon B) und das ist die Abfrage Punkt, für die Sie Nearest Neighbor (n) innerhalb des repräsentativen Datensatz von Polygon A. suchen

Natürlich ist das nur eine Annäherung, aber mir fällt jetzt nichts ein.

Beachten Sie, dass Sie natürlich für Polygon B. das gleiche tun

+0

Der erste Weg ist nicht meine Antwort - tatsächlich habe ich den Befehl dsearchn nicht verwendet, weil ich nicht nur die nächstgelegenen Vertices finden wollte - ich muss die Antwort genau beantworten. Der zweite Weg hat dasselbe Problem. Aber wirklich vielen Dank für Ihre Zeit @gsamaras. –

+0

@pooriahaddad ja ich weiß, aber ich wollte es versuchen! Ich habe meine Antwort aktualisiert, hoffe, es hilft. Übrigens, nette Frage, bekam meine +1! – gsamaras

+0

Ihr letzter vorgeschlagener Ansatz scheint effektiv zu sein. Ich habe eine Lösung in File Exchange gefunden, aber Ihr Ansatz scheint weniger Zeit zu benötigen, um das Problem zu lösen. Du hast meine +1, Danke; –

Verwandte Themen