- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: gelöst: sin(90)=0 ?!

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    26.08.2007
    Ort
    München
    Alter
    33
    Beiträge
    37

    gelöst: sin(90)=0 ?!

    Anzeige

    Praxistest und DIY Projekte
    Hallo Miteinander

    ich bin dabei, ein Programm zu schreiben, das den Roboter irgendwann mal automatisch an seine Ladestation ankoppeln soll.

    Als ersten schritt dachte ich mir, lasse ich den Roboter mithilfe von Polarkoordinaten (x, y aus Drehung und gefahrener Strecke) seine Position bestimmen, um später den Rückweg zu finden.

    Nun zu meinem Problem: um die Koordinaten zu berechnen benötige ich die Sinus und Kosinus-funktion - theoretisch sind diese ja in math.h enthalten...

    Doch: auf dem RP6 ist sin(90) = 0! (Normalerweise sollte ja sin(90) gleich 1 sein)
    auch sin(45), sin (10), sin(1) und sin(0) sind 0...

    PN gibt aus:
    warning: implicit declaration of function 'sin'
    warning: incompatible implicit declaration of built-in function 'sin'
    warning: implicit declaration of function 'cos'
    warning: incompatible implicit declaration of built-in function 'cos'

    Wie kann ich die sin bzw cos Funktion auf dem RP6 benutzen?

    mfg pk

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    39
    Beiträge
    246
    Also auf jeden Fall wird die Funktion nicht gefunden!
    Daher wohl auch die 0.

    Hast du denn #include <math.h> in deinem Programm stehen?

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.12.2007
    Beiträge
    280
    In C und Delphi musst du die Winkel im Bogenmaß angeben.

    Also b = alpha / 180° * pi

    Wird vielleicht da auch der Fall sein!

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780
    Dann würde die Funktion nicht immer 0 liefern, sondern falsche, aber (bei den als Beispiel genannten Zahlen) unterschiedliche Werte


    Die Warnungen sprechen in diesem Fall für sich...
    die Funktion wird einfach nicht gefunden.
    So viele Treppen und so wenig Zeit!

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    26.08.2007
    Ort
    München
    Alter
    33
    Beiträge
    37
    Ups, hatte math.h tatsächlich nicht included

    Jetzt zwar keine Fehlermeldung mehr, gibt allerdings hartnäckig weiter 0 aus (Auch mit Bogenmaß)

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    39
    Beiträge
    1.516
    Hallo,

    Ich kann es gerade nicht testen, aber probier mal

    double x = 1;
    und dann erst
    sin(x)
    Oder halt nach double casten mit sin((double)x).


    Fließkommazahlen kannst Du auch nicht mit writeInteger ausgeben (sagt ja der Name schon - "schreibGanzeZahl").

    Da musst Du dtostrf nehmen
    http://www.nongnu.org/avr-libc/user-...490137317caa44
    um das in ein char array reinzuschreiben
    und anschließend mit writeString() ausgeben.

    MfG,
    SlyD

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    26.08.2007
    Ort
    München
    Alter
    33
    Beiträge
    37
    Code:
    double a = (90/180)*3.14159;
    
    double b = sin((double) a);
    
    char* c = "";
    dtostrf(b, 10, 3, c);
    
    writeString(c);
    writeString_P("\n");
    gibt mir aus: " 0.000"

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    26.08.2007
    Ort
    München
    Alter
    33
    Beiträge
    37
    Habe herausgefunden: (90/180)*3.14159 = 0...
    Wenn ich a = 1.5 setze, kommt für sin(a) sogar 0.997 heraus

    Wieso gibt 90/180 denn 0 bitte?

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Wieso gibt 90/180 denn 0 bitte?
    Ist doch einfach (90/180) wir standardmäßig in int durchgeführt,
    versuche es mal so:
    Code:
    double a = ((double)90/180)*3.14159;
    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    26.08.2007
    Ort
    München
    Alter
    33
    Beiträge
    37
    Ja das funktioniert! vielen Dank an alle!

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests