Page 2 of 5 FirstFirst 1 2 3 4 ... LastLast
Results 16 to 30 of 65

Thread: Hoe Locatie gebied met een bepaalde straal bepalen ?

  1. #16
    Dan zou dit moeten werken voor de snelheid (nog testen)
    Code:
     Speed := LocationSensor1.Sensor.Speed * 3.6; // Meter/min -> Km/uur
     Edit4.Text:= FormatFloat('0.00', Speed );
    MagneticHeading, geeft denk ik de richting van het noorden aan ?
    Nu wil ik niet naar het noorden, maar naar een bepaalde GPS locatie.

    Voor de pijl denk ik een Paintbox ofzo te gebruiken, en dan zelf een pijltje te tekenen.

  2. #17
    Quote Originally Posted by MMSoft View Post
    MagneticHeading, geeft denk ik de richting van het noorden aan ?
    Nu wil ik niet naar het noorden, maar naar een bepaalde GPS locatie.
    Nee, het geeft de graden t.o.v. magnetisch noorden aan. Dus als je naar het zuiden rijdt geeft ie 180º aan. Of 90º voor het oosten.

    Wil je aangeven in welke richting je rijdt dan kun je dat inderdaad met een pijl tekenen doen.

    Als je achter elke locatie (waarbinnen je in die straal zit) de richting aangeven waar het is dan moet je de huidige locatie pakken en per locatie uitrekenen waar het ligt een desbetreffend pijltje in unicide erachter zetten.

    B.v.
    Code:
    Locaties:
    Eindhoven 5km ->
    Tilburg 15km <-
    Valkenswaard 6km -> (maar dan schuin pijltje)
    
    Algemeen:
    Snelheid 2km/u zuid-oost 100º

  3. #18
    Ik deel dit probleem op in 2 delen:
    -Het berekenen van de rij richting als ik op locatie X ben, en ik naar locatie Y moet.
    Daarvoor zijn vast en zeker berekeningen te vinden, maar heb deze nog niet gevonden.

    -Het tekenen van een pijl, die met een waarde van 0....359,99 alle kanten op kan wijzen.
    Ik zit nu hier naar te kijken: http://community.embarcadero.com/blo...-for-ios-39171

  4. #19
    Ik ben met de draaiende pijl bezig.
    Daarvoor plaats ik het plaatje van een pijl op een "ImageViewer", en draai dit plaatje met behulp van 'RotationAngle'
    Als eerste getest als een Windows App, en dan werkt het goed.
    Maar onder Android kom ik weer eens iets vreemd tegen.
    De pijl draait wel mee, maar na een stukje draaien verdwijnt deze en komt pas weer tevoorschijn als de pijl alweer bijna boven is !!!
    Is dit (weer) een Bug, of doe ik iets verkeerd denken jullie ?

    Click image for larger version. 

Name:	Draaiende pijl.jpg 
Views:	127 
Size:	31.1 KB 
ID:	7363

  5. #20
    Niet gezocht of niet gevonden?

    Formula: ? = atan2( sin ?? ? cos ?2 , cos ?1 ? sin ?2 ? sin ?1 ? cos ?2 ? cos ?? )
    where ?1,?1 is the start point, ?2,?2 the end point (?? is the difference in longitude)




    Dit zou de initiële bearing moeten geven tussen twee punten.
    (Er zijn overigens vele verschillende manieren. Je kunt bijvoorbeeld bij korte afstanden ook een simpelere formule gebruiken.)

    Delphi Code:
    1. function modulo(x, y: Extended): Extended;
    2. var
    3.   d: Extended;
    4. begin
    5.   d := x / y;
    6.   Result := (d - floor(d)) * y;
    7. end;
    8.  
    9. function degrees(Rads: Extended): Extended;
    10. begin
    11.   Result := Rads * (180 / Pi);
    12. end;
    13.  
    14. function atan2(y: Extended; x: Extended): Extended; assembler;
    15. asm
    16.   fld [y]
    17.   fld [x]
    18.   fpatan
    19. end;
    20.  
    21. function InitialBearing(lat1, lon1, lat2, lon2: double): double; // in graden
    22. begin
    23.   Result := modulo(degrees(atan2(
    24.     sin(lon2 - lon1) * cos(lat2),
    25.     cos(lat1) * sin(lat2) -
    26.     sin(lat1) * cos(lat2) * cos(lon2 - lon1))), 360);
    27. end;

  6. #21
    Quote Originally Posted by MMSoft View Post
    Maar onder Android kom ik weer eens iets vreemd tegen.
    De pijl draait wel mee, maar na een stukje draaien verdwijnt deze en komt pas weer tevoorschijn als de pijl alweer bijna boven is !!!
    Is dit (weer) een Bug, of doe ik iets verkeerd denken jullie ?
    Als het enige dat je gebruikt de RotationAngle is dan lijkt mij dit een bug.
    (zeker als het in Windows wel goed draait)

  7. #22
    Niet gezocht of niet gevonden?
    Wel gezocht, maar als je niet goed weet waar je naar moet zoeken, dan is dat lastig zoeken

    Dit geeft foutmeldingen:
    Code:
    function atan2(y: Extended; x: Extended): Extended; assembler;
    asm
     fld [y]
     fld [x]
     fpatan
    end;

    Op internet vindt ik dit:
    Code:
    function atan2 (y, x : real) : real;
    begin
      if x > 0       then  atan2 := arctan (y/x)
      else if x < 0  then  atan2 := arctan (y/x) + pi
      //else                 atan2 := pi/2 * sgn (y);  
      else                 atan2 := pi/2 * sign (y);  
    end;
    daarbij geeft 'sgn (y)' een foutmelding en heb ik er 'sign (y)' van gemaakt, maar is dat wel just ?
    Last edited by MMSoft; 13-Sep-16 at 13:04.

  8. #23
    Woops. Ja, dat is assembler maar misschien niet zo handig als dit ook voor Android bedoeld is.
    Die atan2 geeft de ArcTangus waarde van de argumenten.

    Haal die atan2() maar even weg en vervang die door dit:
    Delphi Code:
    1. function sgn(a: extended): extended;
    2. begin
    3.   if a < 0 then sgn := -1
    4.   else sgn := 1;
    5. end;
    6.  
    7. function atan2(y, x: extended): extended;
    8. begin
    9.   if x > 0 then atan2 := arctan(y / x)
    10.   else if x < 0 then atan2 := arctan(y / x) + pi
    11.   else atan2 := pi / 2 * sgn(y);
    12. end;

    Of misschien zit er in de modernere Delphis wel atan2() in de Math ???

    Edit: ff kijken in de Delphi Berlin Starter......
    Ik kan er wel wat over vinden maar ik krijg de functie in Berlin Starter ook niet.
    Dus gebruik maar gewoon de code die hierboven staat.
    Last edited by rvk; 13-Sep-16 at 13:13.

  9. #24
    Quote Originally Posted by MMSoft View Post
    daarbij geeft 'sgn (y)' een foutmelding en heb ik er 'sign (y)' van gemaakt, maar is dat wel just ?
    Ja, die code is niet helemaal correct.
    Pak de code uit mijn vorige post en die heb ik iets aangepast dat ie wel werkt.

  10. #25
    Ik gebruik je code, en probeer intussen ook een (werkende) draaiende pijl te maken, want die kan ik goed gebruiken tijdens het testen...

    Edit:
    De code lijkt goed te werken, nu heb ik het aantal graden naar mijn bestemming.
    Nu ben ik aan het kijken hoe ik de juiste richting weer kan geven als ik mijn GSM verdraai.
    Hiervoor moet ik natuurlijk de stand van de GSM gebruiken, samen met de berekende hoek waarheen ik moet gaan.

    Helaas werkt mijn draaiende pijl nog niet....

    Edit2:
    Na een dag één eenvoudig draaiende pijl tekenen heb ik helaas nog niets werkends.
    Met "ImageViewer" werkt het niet door een Bug, en alles wat ik op een PaintBox teken krijg ik niet te zien...
    Als Windows App, werkt alles, maar onder Android helaas niet.

    Wie heeft er een oplossing ?
    Last edited by MMSoft; 13-Sep-16 at 15:37.

  11. #26
    In plaats van de draaiende pijl gebruik ik nu (tijdelijk) een ArcDial.

    De Hoek berekening lijkt te kloppen (bedankt daarvoor).

    Het grootste probleem dat ik op dit moment heb is dat "MagneticHeading" bij mij niet werkt.
    Deze (of een andere manier) heb ik nodig om te kunnen bepalen in welke richting ik de GSM hou, om zo de "pijl" (ArcDial) aan te kunnen passen, zodat deze altijd in de berekende richting blijft wijzen (ook als ik de GSM verdraai).

  12. #27
    Quote Originally Posted by MMSoft View Post
    Het grootste probleem dat ik op dit moment heb is dat "MagneticHeading" bij mij niet werkt.
    Deze (of een andere manier) heb ik nodig om te kunnen bepalen in welke richting ik de GSM hou, om zo de "pijl" (ArcDial) aan te kunnen passen, zodat deze altijd in de berekende richting blijft wijzen (ook als ik de GSM verdraai).
    Ik lees nu net dat de MagneticHeading niet ondersteund wordt op android (wel op Windows een iOS).
    http://docwiki.embarcadero.com/Libra...LocationSensor
    (Onder het kopje Platform Support)

    Maar ik denk dat je sowieso een verkeerde indruk hebt van die waarde. Het is niet de richting waarop je je toestel houdt maar de richting waarin je op aarde rijdt. Als je wilt weten hoe je je toestel houdt dan moet je andere sensor raadplegen.

    Waarschijnlijk deze
    http://docwiki.embarcadero.com/Libra...omMotionSensor
    Of deze
    http://docwiki.embarcadero.com/Libra...entationSensor

  13. #28
    Na van alles geprobeerd te hebben, krijg ik alleen bij de 'MotionSensor' bij AccelerationX, AccelerationY en AccelerationZ wisselende waardes als ik de GSM kantel.

    Bij de 'OrientationSensor' krijg ik geen enkele waarde, op de melding NAN na (Not a Number).
    Alleen deze geven een waarde, maar deze is altijd 0
    Label1.Text := FloatToStr( OrientationSensor1.Sensor.HeadingX );
    Label2.Text := FloatToStr( OrientationSensor1.Sensor.HeadingY );
    Label3.Text := FloatToStr( OrientationSensor1.Sensor.HeadingZ );

    De Sensor staat Aan:
    OrientationSensor1.Active := True;

    Ik heb er net een Compass Appje op geinstalleerd, en dat werkt wel, dus de sensor die hiervoor gebruikt wordt werkt wel, maar hoe ?
    Last edited by MMSoft; 15-Sep-16 at 12:32.

  14. #29
    Quote Originally Posted by MMSoft View Post
    Na van alles geprobeerd te hebben, krijg ik alleen bij de 'MotionSensor' bij AccelerationX, AccelerationY en AccelerationZ wisselende waardes als ik de GSM kantel.
    Dat is dan toch goed. Zeker als je je apparaat beweegt.

    Maar voor de huidige stand van zaken denk ik dat je de OrientationSensor moet gebruiken.
    En dan met name de HeadingX, HeadingY and HeadingZ.

    Die zouden de huidige stand van zaken aan moeten geven op het moment dat je het toestel stil houdt.
    (wat geven die nu aan als waardes?)

    Voor Android staat daar het volgende:
    Android
    Android provides different types of orientation sensors. Each type of sensor supports a different set of properties:
    The Compass3D sensor provides the HeadingX, HeadingY and HeadingZ properties.
    The Inclinometer3D sensor provides the TiltX, TiltY and TiltZ properties.
    http://docwiki.embarcadero.com/Libra...entationSensor

    Als je NaN terug krijgt dan denk ik dat je niet de goede sensor gepakt hebt.
    Je moet volgens mij alle sensoren even aflopen en kijken of SensorType de waarde Compass3D heeft.

    Of zoek even op internet op "Delphi Compass3D SensorType".

    http://www.delphipraxis.net/177204-x...r-android.html
    http://community.embarcadero.com/blo...-delphi-xe6-66

  15. #30
    Dat is dan toch goed. Zeker als je je apparaat beweegt
    Dat is inderdaad perfect, de MotionSensor werkt dus.

    Maar voor de huidige stand van zaken denk ik dat je de OrientationSensor moet gebruiken.
    En dan met name de HeadingX, HeadingY and HeadingZ.

    Die zouden de huidige stand van zaken aan moeten geven op het moment dat je het toestel stil houdt.
    (wat geven die nu aan als waardes?)
    Code:
    procedure TForm1.FormActivate(Sender: TObject);
    begin
     OrientationSensor1.Active := True;
    End;
    
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     Label1.Text := FloatToStr( OrientationSensor1.Sensor.HeadingX );
     Label2.Text := FloatToStr( OrientationSensor1.Sensor.HeadingY );
     Label3.Text := FloatToStr( OrientationSensor1.Sensor.HeadingZ );
    end;
    De 3 waardes blijven 0 wat ik ook doe en hoe vaak ik ook op Button1 druk

Page 2 of 5 FirstFirst 1 2 3 4 ... LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •