Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Treue Seele
Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
pcl::PointCloud<pcl::PointXYZRGB> cloud; cloud.height = 144; cloud.width = 176; cloud.resize(cloud.height * cloud.width); // KoordinatenSystem: // +Y -> Oben // +X -> Links // +Z -> Raus // Gegeben: Radiale Entfernung (depth), Blickrichtung +Z // http://mathworld.wolfram.com/SphericalCoordinates.html // Horizontaler Startwinkel (tetha) (Zwischen X und Y) // 90 - Halber Öffnungswinkel des Sensors // Weil: +X geht nach Links und Blickrichtung +Z, somit liegt der Nullpunkt bei 90° float horAngel = 90.0 - (44.0 / 2.0); // Vertikaler Startwinkel (phi) (Zwischen Z und XY Ebene) // Halber Öffnungswinkel float vertAngel = +(35.0 / 2.0); // Winkelschritt zwischen zwei Pixeln = Öffnungswinkel / Anzahl Pixel float horAngelStep = 44.0 / 176.0; float vertAngelStep = 35.0 / 144.0; for (int i = 0; i < cloud.height; i++) { for (int j = 0; j < cloud.width; j++) { cloud.at(j, i).x = depth[i][j] * std::sin(vertAngel * (M_PI / 180.0)) * std::cos(horAngel * (M_PI / 180.0)); cloud.at(j, i).y = depth[i][j] * std::sin(vertAngel * (M_PI / 180.0)) * std::sin(horAngel * (M_PI / 180.0)); cloud.at(j, i).z = depth[i][j] * std::cos(vertAngel * (M_PI / 180.0)); cloud.at(j, i).r = 255; cloud.at(j, i).g = 255; cloud.at(j, i).b = 255; horAngel += horAngelStep; } horAngel = 90.0 - (44.0 / 2.0); vertAngel -= vertAngelStep; } return cloud; |
Treue Seele
Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Koschi« (10.06.2015, 23:33)
Treue Seele
Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft
@Koschi
Was genau meinst du mit "die Höhe und Breite der Cloud auf ein Winkel umlegen"?
Zitat
Ich würde ja eigentlich ein Kugelausschnitt in z Richtung um den Ursprung herum erwarten. Allerdings sieht mein Ergebnis etwas anders aus (siehe ergebnis1.png im Anhang).
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Koschi« (11.06.2015, 00:36)
Treue Seele
Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft
Was du aber mal noch Probiern könntest, nur ein Quadranten abzubilden (Spiegelachse wäre Horizontale und Vertikale 0° Linie) die anderen 3 lassen sich dann über die Symetrie bestimmen. Vielleicht Hilft das ja etwas,das Erebnis zu verbessern.
Edit: Noch was ist mir aufgefallen:
Zitat
Ich würde ja eigentlich ein Kugelausschnitt in z Richtung um den Ursprung herum erwarten. Allerdings sieht mein Ergebnis etwas anders aus (siehe ergebnis1.png im Anhang).
Um den Ursprung ist nicht Möglich da der Horizontal Winkel nur von 68 ° bis 112° abgebildet wird. Die 68 ° Ergeben sich aus float horAngel = 90.0 - (44.0 / 2.0); dann addierst du dazu wieder 44 ° aufgeteil in 176 schritten (float horAngelStep = 44.0 / 176.0; horAngel += horAngelStep
Wenn es um den Ursprung sein soll müsste es doch von +22° bis -22° grad sein. Wenn du 90 ° drauf addierst bist du ja eigentlich in Blickrichtung X oder?
Versuch mal damit:
die Winkel müssen getauscht werden da bin cih mir fast sicher da hast du es verwechselt zwischen horizontal und vertikal bei der rechnung
vertikaler startWinkel=0°
schrittweite vertikel=90/144
horizontaler startwinkel=0
schrittweite horizontal= 180/176
poste das bild wie es aussieht
Zitat
Ich arbeite ja im 3D. Wenn die Winkel nicht um 0° liegen, dann verschiebt sich nur die Lage des Kugelabschnitts im Raum, aber nicht der Mittelpunkt der Kugel. Die Punkte liegen immer um den Ursprung, da sie ja alle vom Ursprung ausgehend die selbe Länge haben.
Treue Seele
Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft
Treue Seele
Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft
Also waren die Werte doch korrekt bezüglich horizontal vertikal.
Also ergebnis 4 sieht doch gut aus es ist genau der Kugel ausschnitt den du mti den Formal berechnen kannst
Obwohl man den vertikalen winkel zwischen 0 und 90° halten sollte versuch mal folgendes:
startwinkel -90°
schrittweite 180/144
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
float horAngel = 90.0; float vertAngel = -90.0; float horAngelStep = 180.0 / 176.0; float vertAngelStep = 180.0 / 144.0; for (int i = 0; i < cloud.height; i++) { for (int j = 0; j < cloud.width; j++) { cloud.at(j, i).x = depth[i][j] * std::sin(vertAngel * (M_PI / 180.0)) * std::cos(horAngel * (M_PI / 180.0)); cloud.at(j, i).y = depth[i][j] * std::sin(vertAngel * (M_PI / 180.0)) * std::sin(horAngel * (M_PI / 180.0)); cloud.at(j, i).z = depth[i][j] * std::cos(vertAngel * (M_PI / 180.0)); cloud.at(j, i).r = 255; cloud.at(j, i).g = 255; cloud.at(j, i).b = 255; horAngel += horAngelStep; } horAngel = 90.0; vertAngel += vertAngelStep; } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Tankard« (11.06.2015, 15:49)
Ja, die Verschiebung hatte ich gemacht, da die Winkel aus Sicht des Sensors und die Winkel, wie sie in den Kugelkoordinaten verwendet werden, nicht überein stimmen. Wenn ich mir die Grafik in dem Link (http://mathworld.wolfram.com/SphericalCoordinates.html) angegucke, dann ist theta 0° ja auf der x-Achse. Wenn ich mit dem Sichtfeld des Sensors arbeite, dann wäre theta 0° aber auf der y-Achse, was ja eigentlich 90° entsprechen würde. Daher habe ich dann 90°-(Öffnungswinkel/2) als start genommen. Nach meinem Verständnis bin ich dann von der y-Achse aus um den halben Öffnungswinkel in Richtung +x gegangen.
Bei mir ist ja +x nach Links und +y nach Oben. Also vom Ursprung entlang der z-Achse wären es bei mir theta = 0° und phi = 0° und nicht wie in der Grafik theta = 90° und phi = 0°.
Zumindest habe ich das so verstanden.
Werbeanzeige