PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom und Sinus will nicht klappen



JollyJumper8
10.10.2009, 01:36
Hallo ihr Roboterfreunde,

ich habe ein kleines Problem was mich so langsam richtig zum verzweifeln bringt.
Eigentlich ist alles ganz einfach.
Ich will lediglich zwei Positionen bestimmen.
Einmal X und Y Standpunkt
und
X und Y Zielpunkt!
Ich errechne mir daraus die Weg Koordinaten X und Y Fahrweg
und setzte das in ein Zeigerdiagramm.
Daraus entnehme ich den Quadranten und will mir eigentlich den Drehwinkel errechnen.
Dazu wollte ich mir der Winkelfunktionen behelfen aber das will und will nicht hinhauen. Die gesamte Rechnung stimmt bis zu einem ganz entscheidenen Punkt.

$regfile = "m128def.dat"
$crystal = 16000000
$baud = 9600

'Sound Portg.2 , 400 , 250

Dim Xst As Single
Dim Xzi As Single
Dim Xw As Single

Dim Yst As Single
Dim Yzi As Single
Dim Yw As Single

Dim Zw As Single
Dim Zw1 As Single
Dim Xqua As Single
Dim Yqua As Single

Dim I As Single

Dim Winkel1 As Single

Xst = 0
Yst = 0

Xzi = 2
Yzi = 3

Xw = Xzi - Xst
Yw = Yzi - Yst

If Xw = 0 And Yw = 0 Then
Winkel1 = 0
Print "Wir befidnen uns genau auf dem Nullpunkt"
End If
If Xw > 0 And Yw >= 0 Then
Winkel1 = 0
Print "Wir befidnen uns im I Quadranten"
End If
If Xw <= 0 And Yw > 0 Then
Winkel1 = 180
Print "Wir befidnen uns im II Quadranten"
End If
If Xw < 0 And Yw <= 0 Then
Winkel1 = -270
Print "Wir befidnen uns im III Quadranten"
End If
If Xw >= 0 And Yw < 0 Then
Winkel1 = 360
Print "Wir befidnen uns im IV Quadranten"
End If


Print "Der Winkel ist " ; Winkel1 ; "°"
Print "Der Weg auf der X-Achse beträgt " ; Xw
Print "Der Weg auf der Y-Achse beträgt " ; Yw

Xqua = Xw * Xw
Yqua = Yw * Yw

Zw1 = Xqua + Yqua
Zw = Sqr(zw1)

Print "Die Hypotenuse ist " ; Zw

I = Yw / Zw
Print I '0.832050201 stimmt
Print Yw '3.0 stimmt
Print Zw '3.60555124 stimmt auch
I = Sinh(i) '0.931434269 STIMMT NICHT Eigentlich 0.98281... Warum ???

Print I
I = Rad2deg(i)
Print I
I = I + Winkel1

Print "Das sollte der Winkel vom Ursprung sein " ; I

'Sound Portg.2 , 800 , 125

End


Ab dem Moment wo ich den Sinus aus I errechnen will passt es einfach nicht mehr, dabei ist doch das gar nicht besonderes!
Kann mir irgendwer erklären warum. Ich habe es über Cosinus versucht genau das gleiche Problem. Wenn ich genau den selben Rechenschritt mit dem Taschenrechner nachrechne, mit den gleichen Zahlen etc. komme ich immer auf den richtigen Wert. Damit ich auch weiß welches der richtige Wert ist habe ich das ganze im CAD nachgezeichnet und die Winkel gemessen, dass ist schon glatt peinlich. Au Back und ich wette es ist wieder eine Kleinigkeit!
Schonmal vielen Dank im vorraus.
MfG Simon

Willa
10.10.2009, 11:56
Hi!
Ich habe mir den Code jetzt nicht angeschaut, aber ich wette, dass du vergessen hast, dass Winkelfunktionen mit RAD rechnen und nicht mit DEG. Guck dir mal "RAD2DEG" etc. in der Bascom Hilfe an...

JollyJumper8
10.10.2009, 20:14
Hi Willa,
thx für deine quick Antwort aber ich habe mich mit der Funktion schon vertraut gemacht. siehe 6 Zeile von unten im Code.
Ich habe es auch mit meinen Taschenrechner im DEG sowie im RAD Modus gerechnet. Ich komme einfach nicht auf den Wert den mir Bascom errechnet!
Total komisch, irgendwo ist da entweder ein denkfehler oder ich verwechsel irgendwas. Aber eigentlich kann ich auch nicht soviel falsch machen da ich ja den Fehler genau lokalisiert habe und ihn somit nachrechnen kann. Hmmm

recycle
10.10.2009, 20:36
Total komisch, irgendwo ist da entweder ein denkfehler oder ich verwechsel irgendwas.

Du hast die Werte ja in dinem Quelltext angegeben und der Wert den Bascom ausrechnet ist ja entlich nicht völlig falsch.
Fliesskomma-Berechnungn sind nicht unbedingt die Stärke eines µC. Könnte es sein, dass sich der relative hohe Fehler (ca. 5%) aus der Ungenaugikeit des Datentypen "Single" ergibt?

JollyJumper8
10.10.2009, 21:14
Hmmm, also das Beispiel das ich jetzt gerade gepostet habe ist relativ harmlos, wenn ich jedoch andere Koordinaten benutze kann es sich im Winkel mit ca. +- 20Grad auswirken. Kann ich diesen Fehlerquotienten irgendwie eindämmen ?

JollyJumper8
10.10.2009, 21:19
Eines ist vieleicht noch dazu zu erwähnen sowohl die Berechnung der Hypotenuse und des Ergebnises aus der Division stimmen exakt mit dem Ergebnisen meines Taschenrechners überein nur der Sinuswert treibt enorm ab vom eigentlichen. Komisch komisch

JollyJumper8
10.10.2009, 21:23
Ach ganz kurze Zwischenfrage die Funktion COS und COSH in Bascom kann ich doch als Cosinius und Cosinus-1 ableiten oder?

JollyJumper8
10.10.2009, 21:33
Hoppala jetzt nach rund 30 Std. Kopf vermatern ist mir der Fehler aufgefallen. Ich habe anstatt den Arcsinus (Asin Funktion Bascom) den Sinh Funktion genommen. Natürlich völliger Blödsinn. Jetz mit dem Asim stimmt das Ergebnis fast 100% erst nach der 6ten Stelle treten Fehler auf! Nun kann ich mit dem Konvertieren des GPS Signal anfangen und dann hab ich schon die halbe Miete :)