Wir haben eine 3D-Punktwolke mit einigen zylindrischen Formen. Wir können pro-grammatisch auf jede der Koordinaten des Punktes (x, y, z) zugreifen.Können Sie einen Algorithmus vorschlagen, der die Punkte markiert, die zu einem Zylinder gehören?
Antwort
Überprüfen Sie, ob z innerhalb [minz..maxz]
if (z > maxz || z < minz)
return false;
Dann sehen, ob der Punkt innerhalb des Kreises der Mitte ist (centerX,centerY)
und radious R
:
return ((x-centerX)*(x-centerX) + (y-centerY)*(y-centerY) <= R*R);
dies den Zylinder übernimmt wird
nicht gedreht@Exception Ich bin etwas verwirrt über diese Linie "Punkt ist innerhalb des Kreises der Mitte (centerX (MitteY) "Kannst du es noch einmal klar erklären. thnx im Voraus –
@AbdurRazzak ein Kreis hat Gleichung (x-xc)^2 + (y-yc)^2 = r^2, siehe https://en.wikipedia.org/wiki/Circle#Equations. Wenn Sie in Ihrem Fall also überprüft haben, ob z in Ordnung ist, müssen Sie nur überprüfen, ob (x, y) ein Punkt ist, für den (x-xc)^2 + (y-yc)^2 <= r^2 – Exceptyon
thnx @exception –
Sie könnten den Algorithmus RANSAC verwenden. Auf der Wikipedia-Seite gibt es ein Beispiel für eine 2D-Punktwolke und eine Linie. Die Erweiterung auf 3D und einen Zylinder ist einfach.
Grundsätzlich wählen Sie nach dem Zufallsprinzip minimale Teilmengen aus der Punktewolke, die einen Zylinder vollständig bestimmen, Sie erstellen ein mathematisches Modell des Zylinders und dann schauen Sie, wie viele Punkte diese Hypotesis bestätigen (zB nicht weiter vom modellierten Zylinder entfernt) als irgendeine Schwelle) und Sie behalten den besten Zylinder bis jetzt. Du machst das einige Male.
Für einen Zylinder benötigen Sie,
Ich denke, 4
5 Punkte, um seinen Radius und die Hauptachse Vektor zu erhalten. Dann brauchen Sie vielleicht noch weitere Punkte, um eine Höhe des Zylinders zu bestimmen, wenn Sie es sind.
Es gibt einen Artikel, der sich mit der Bestimmung zylindrischer Gleichungen aus fünf Punkten befasst: Cylinders Through Five Points: Computational Algebra and Geometry. Es hat auch Mathematica Code im Anhang und viele Referenzen auf andere Artikel.
@zagkljan kannst du mich über mathematisches Modell des Zylinders klar machen ..... ??? thnx im Voraus –
@AbdurRazzak Ich habe einen Verweis auf einen Artikel hinzugefügt, der Ihnen die Antworten geben könnte. – zegkljan
umreißt eine Lösung: (Wir ähnliche Lösung in der Vergangenheit verwendet haben, aber ich verlor die Details)
Sie im Grunde brauchen Zentrum (C), Achse (n) finden (Richtung Cosinus) und Radius (R) für einen Zylinder.
dann für jeden Punkt P, Abweichung (oder Fehler) von der Soll-Zylinder und einem Punkt (Normalabstand zwischen dem Punkt zu berechnen und der Achse).
delta^2 = |(P -C) - (P - C) . n * n|^2 - r^2
Wir müssen die Fehler minimieren. Durch die Verwendung von partiellen Differentiationen und einigen Vektoren können wir Werte herausfinden, die dem minimalen Fehler entsprechen. Es ist auch möglich, die Punkte zu probieren (wenn wir wissen, dass sie zur selben Oberfläche gehören).
- 1. Algorithmus zu aggregieren Punkte
- 2. Können Sie mir einen Weg vorschlagen, um Daten der wöchentlichen Bemühungen in der Datenbank zu speichern
- 3. Kontrollieren Sie die Größe der Punkte in einem R Scatterplot?
- 4. Können Sie irgendwelche Weltkartensteuerelemente für ASP.NET vorschlagen?
- 5. Liste der Punkte und finden Sie die nächstgelegenen Punkte Problem
- 6. Speichern Sie zwei Modelle (die zu einem dritten Modell gehören) mit einem Submit?
- 7. Rails: Wie können Benutzer von Firmen zugeordnet werden, die zu einem Benutzer gehören?
- 8. Algorithmus für das Vorschlagen von Produkten
- 9. WCF-Dienste, die zu einem Bereich in der MVC-App gehören, an einem gerouteten Pfad anzeigen
- 10. Was ist der beste Autocomplete/vorschlagen Algorithmus, Datenstruktur [C++/C]
- 11. Können Sie einen einfachen Pub/Sub-Mechanismus vorschlagen, der ohne Konfiguration/Installation funktioniert?
- 12. Algorithmus zu finden, die Linien Bracketing einen Punkt
- 13. Validieren Sie die Felder, die zum anderen/importierten Modell gehören
- 14. Gegeben drei Punkte auf einem Tetraeder, finden Sie die 4.
- 15. Verwenden von pointinterval, um die Anzahl der Punkte zu reduzieren
- 16. Auf der Suche nach einem Algorithmus für die Roboternavigation
- 17. Wie entwerfe ich einen Algorithmus, um die optimale Lösung für die Anzahl der Änderungen zu finden?
- 18. die Pixel erhalten, die einer Form gehören,
- 19. Summieren Sie Elemente in Unterlisten zu Kategorien, zu denen sie gehören, über die Hauptliste
- 20. Anzahl der Punkte in einem Bild
- 21. Gibt es einen Algorithmus zur Berechnung der Fläche einer Form gegebenen Koordinaten, die die Form definieren?
- 22. Bereich, der Punkte enthält?
- 23. Wie können Sie einen Algorithmus für die Rotation einer Entwicklerüberprüfungswarteschlange entwickeln?
- 24. Wie Code der Methode zu sehen, die als MethodImplOptions.InternalCall markiert?
- 25. Algorithmus für die Überprüfung der Transitivität der Beziehung?
- 26. Python: Wie bekomme ich Zeilen, die den Maximalwert der Gruppe haben, zu der sie gehören?
- 27. Erweitern Sie die Punkte von Geometry.STEnvelope()
- 28. ZedGraph: nur die Punkte
- 29. Gibt es einen Algorithmus, der die beschränkte Eingabe an die mögliche Ausgabe anpasst?
- 30. Gibt es einen Namen für einen Datentyp, der zu einem Set gehören kann?
Was wissen Sie über den Zylinder? Ist die Zylinderachse notwendigerweise parallel zur z-Achse? Versuchen Sie, den Zylinder zu optimieren, um eine große Anzahl von Punkten abzudecken? –
Ich versuche auf jeden Punkt von jeder (x, y, z) Koordinate zuzugreifen, wo alle Punkte, die zu einem Zylinder gehören @Danial –