Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   TSphere mithilfe MotionSensor drehen? (https://www.delphipraxis.net/192482-tsphere-mithilfe-motionsensor-drehen.html)

derseitzer 21. Apr 2017 18:50

TSphere mithilfe MotionSensor drehen?
 
Ich würde gerne meine TSphere mithilfe meines MotionSensors drehen und habe diesen code in einen Timer mit 100ms geschrieben:

procedure TFormMain.Timer1Timer(Sender: TObject);
begin
//Sphere1.RotationAngle.X := 360*MotionSensor1.Sensor.accelerationX;
//Sphere1.RotationAngle.Y := 360*MotionSensor1.Sensor.accelerationY;
//Sphere1.RotationAngle.Z := 360*MotionSensor1.Sensor.accelerationZ;
Dummy1.RotationAngle.X := 360*MotionSensor1.Sensor.accelerationX;
Dummy1.RotationAngle.Y := 360*MotionSensor1.Sensor.accelerationY;
Dummy1.RotationAngle.Z := 360*MotionSensor1.Sensor.accelerationZ;
end;

aber leider will das nicht so ganz..
Andere schreiben diesen code in den Motionsensor unter events in OnDataChanged aber dieses Ereignis gibt es bei mir nicht.. hat jemand eine Idee?

BrightAngel 21. Apr 2017 20:41

AW: TSphere mithilfe MotionSensor drehen?
 
Guten Abend :)

Ich bin vermutlich nicht die beste Hilfe, weil du das folgende bestimmt schon kennst, aber Embarcadero hat in der englischen Doku der Sensoren ein paar Beispiele verlinkt. Eines davon gibt es auf Sourceforge. In der uMain.pas gibt es ab Zeile 89 auch die selben Zugriffe die auch du verwendest :?

Ich habe das leider in Delphi auch noch nicht gemacht und kenne mich da nicht aus. Die machen das ja auch über einen Timer. Irgendwie fühlt sich für mich das aber auch nicht vollständig richtig an: Der Timer pollt ja dann immer nur die Werte. Vor allem verstehe ich einen Beschleunigungssensor so, dass er doch die momentane Beschleunigung misst. Wenn ich da zu selten messe (oder Daten abgreife), dann wird das doch ungenau, oder? :?:

Tut mir leid, dass ich keine größere Hilfe in diesem Fall bin... :oops:

[Edit]
Ich sehe jetzt erst: Benutzt du die Beschleunigung für den absoluten Winkel? Kann das sein, dass du die Kugel nicht nach der Beschleunigung, sondern nach absoluten Lagewinkeln drehen willst? Ist vielleicht gar nicht das Abgreifen, sondern die Auswertung selbst nicht ganz richtig? Siehst du als Effekt, dass sich deine Kugel immer nur kurz dreht, wenn du den Sensor anschuckst, aber dann wieder zurück in die Ausgangsposition "springt" sobald der Sensor ruhig liegt und keine Änderung stattfindet?

Embarcadero Dokumentationsauszug:
Zitat:

Stellt Informationen über Beschleunigung, Winkel, Status und Geschwindigkeit der Gerätebewegung bereit.
AccelerationX, AccelerationY und AccelerationZ geben die Beschleunigung in Gal für die X-, Y- und Z-Achse zurück.
AngleAccelX, AngleAccelY und AngleAccelZ geben die Winkelbeschleunigung in Grad pro Sekunde^2 (°/s²) für die X-, Y- und Z-Achse zurück.
Speed ermittelt die Geschwindigkeit des Gerätes in Meter pro Sekunde (m/s).
Motion ermittelt, ob das Gerät aktuell bewegt wird oder nicht.

Wikipedia schreibt im Übrigen zu Gal:
Zitat:

1 Gal = 1 cm/s² = 0,01 m/s², also etwa ein Promille der durchschnittlichen Erdbeschleunigung von ca. 9,81 m/s² ≈ 10 m/s² = 1000 Gal.
[/Edit]

Brighty

derseitzer 21. Apr 2017 21:06

AW: TSphere mithilfe MotionSensor drehen?
 
Guten Abend und danke für deinen Beitrag:)
Ich habe bis vor wenigen Tagen auch keine Ahnung gehabt also habe ich 8 Labels erstellt und sie mit diesen Variablen des Sensors verbunden, das Handy entwas bewegt und geschaut was mir die Labels für Werte ausgeben.. Nur die Ersten Drei die du hier unten siehst, haben mir konstant Wert gegeben alle anderen waren immer 0.

AccelerationX
AccelerationY
AccelerationZ
AngleAccelX
AngleAccelY
AngleAccelZ
Motion
Speed

Das war der Grund warum ich es so versucht habe.. und ich weiß nicht ganz wo hier der Haken ist :/

BrightAngel 21. Apr 2017 21:15

AW: TSphere mithilfe MotionSensor drehen?
 
Ich kann auch nur mutmaßen, aber vielleicht hat das etwas mit dem Sensor auf Hardwareebene zu tun? Beziehungsweise könntest du eine Beispielapp zum testen der Sensoren aus dem Appstore holen und dann mal schauen, was die liefern: Wenn die mit Java geschriebene App für diesen Sensor in diesem einen Handy mehr Werte liefert, dann liegt es vielleicht wirklich an der Delphikomponente. Wenn nicht, dann hast du deine Ursache. Vielleicht liefert dieser Sensor nur einen Teil der Daten, weil deine HardwareX nur einen Teil der Sensoren verbaut hat. Das wäre jedenfalls eine plausible Erklärung für die vielen Unveränderlichen. Hast du schonmal ein anderes Handy ausprobiert?

Zu der Beschleunigung: Wenn du nur die Beschleunigung hast und du deine Kugel damit anschubsen willst; also dass deine virtuelle Kugel "die selbe Beschleunigung erfährt wie dein physisch vorhandenes Handy", dann müsste man vermutlich die derzeitige Position der Kugel nebst deren derzeitigen Geschwindigkeit speichern und dann bei jeder Messung die Geschwindigkeit anhand der gemessenen Beschleunigung anpassen. Aber irgendwie müsste man eventuell noch der Kugel eine fiktive Masse geben, wenn ich mich da noch richtig verschwommen an die Formel erinnern sollte :oops:

[Edit]
Je länger ich darüber nachdenke und je mehr ich darüber lese, desto logischer erscheint mir, dass AccelerationX/Y/Z die Beschleunigungen im kartesischen Koordinatensystem sind (also wie sehr/heftig habe ich mein Handy entlang der X/Y/Z-Achse beschleunigt?) und die AngleAccelX/Y/Z die Beschleunigungen um die jeweiligen Achsen sind (also wie sehr/heftig habe ich mein Handy um dessen eigene X/Y/Z-Achse gedreht?). Und Motion und Speed sollten klar sein, jedoch scheint das Handy keinen Referenzpunkt zu haben (es nimmt nur die Unterschiede war, aber weiß nicht absolut wie schnell es grade ist...?!?).
[/Edit]

Brighty

Michael II 21. Apr 2017 22:51

AW: TSphere mithilfe MotionSensor drehen?
 
Hallo

ich empfehle dir einen Blick in die Doku über "AvailableProperties" zu werfen. Damit kannst du abfragen, welche Fähigkeiten die in deinem Gerät eingebauten Sensoren haben.

Auf
https://sourceforge.net/p/radstudiod...ntationSensor/

gibt es ein sehr gutes Beispiel, dort unter

radstudiodemos-code-2024-branches-RADStudio_Berlin\Object Pascal\Multi-Device Samples\Device Sensors and Services\SensorInfo

Ich hab's rasch auf meinem alten Nexus10 gecheckt. Läuft gut.

Gruss und viel Spass beim Coden.

derseitzer 21. Apr 2017 23:24

AW: TSphere mithilfe MotionSensor drehen?
 
Michael: Ich werde mir die Dateien runterladen aber könntest du eventuell trotzdem erklären, was ich nun codieren muss damit es funktioniert

BrightAngel 21. Apr 2017 23:32

AW: TSphere mithilfe MotionSensor drehen?
 
Zitat:

Zitat von Michael II (Beitrag 1368641)
ich empfehle dir einen Blick in die Doku über "AvailableProperties" zu werfen. Damit kannst du abfragen, welche Fähigkeiten die in deinem Gerät eingebauten Sensoren haben.

Auf
https://sourceforge.net/p/radstudiod...ntationSensor/

Wieder was gelernt. Danke! :P

Michael II 22. Apr 2017 12:08

AW: TSphere mithilfe MotionSensor drehen?
 
Hallo derseitzer

ich empfehle dir den Code:

radstudiodemos-code-2024-branches-RADStudio_Berlin\Object Pascal\Mobile Snippets\OrientationSensor

von
https://sourceforge.net/p/radstudiod...ntationSensor/

zu laden und zu testen.

Dieses Beispiel zeigt dir, wie du die Lage deines Geräts im Raum abfragen kannst. (TiltX, TiltY, TiltZ). (Ich nehme an, dass du das willst.)


Wenn du nun die Sphäre je nach Lage deines Tablets anzeigen willst, dann arbeite entweder

- mit der Eigenschaft TSphere.RotationAngle

ODER (wenn du zum Beispiel eine Szene mit mehreren Elementen (nicht nur TSphere) darstellst)

- du lässt die Sphäre fix und arbeitest mit einer Kamera (TCamera), welche sich je nach ermittelten Tilt Werten um deine Sphäre bewegt. In diesem Fall musst du die Position und den Rotationswinkel deiner Kamera aufgrund der TiltWerte und dem von dir gewünschten Abstand (Kamera,Sphäre¦Szene) berechnen.


Gruss und viel Spass beim Coden...

derseitzer 24. Apr 2017 09:59

AW: TSphere mithilfe MotionSensor drehen?
 
vielen dank michael2!
Bei mir sind die Tilt-Werte immer 0.. die Heading werte allerdings nicht :/ warum?

himitsu 24. Apr 2017 10:05

AW: TSphere mithilfe MotionSensor drehen?
 
Zitat:

Eines davon gibt es auf Sourceforge.
Eigentlich sind das alle.
Wenn man sowieso die neuste Delphi-Version hat, kann man damit das Demo-Verzeichnis von Delphi aktualisieren.

Nur bei älteren Delphis muß man etwas aufpassen, da dort eben immer alles ans aktuellste Delphi angepasst wird und dann nicht immer alles in allen älternen Versionen mehr funktioniert.

Es wäre zu praktisch, wenn Emba da direkt beim DelphiSetup das SVN mit installiert (also die SVN-Kontrolldateien im Demoverzeichnis)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz