Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > > > Hallo, > > > > > > für die Berechnung eines Winkels aus 2 Koordinaten wollte ich die function atang_korr aus > > > dem Modul mathx benutzen. Da es nicht funktionierte, bemerkte ich, daß die Fließkomma > > > Berechnung nicht funktioniert. Die C Control Unit rechnet nur mit gerundeten ganzen > > > Zahlen. Um das zu verifizieren habe ich eine einfache Tangens Rechnung programmiert > > > ( a/b=tan). Aber es kommen immer nur ganze Zahlen heraus, obwohl die Variablen > > > durchweg als float deklariert sind. Anstatt z.B. 0,123456 läßt sich mit dem LCD oder auch > > > per hwcom zum Terminalprogramm nur eine 0 abbilden. > > > Wie kann ich die Unit bewegen, mit Kommastellen zu arbeiten ? > > > > > > Lutz Kubens > > > > Hallo, > > ein Auszug aus Deinem Programm wäre hilfreich, denn der Compiler der IDE > > hält hier einige Fallstricke bereit. > > > > Hallo krassos, > hier in groben Zügen, wie das Programm aufgebaut ist: > float WPnord[30], WPeast[30]; > thread main > {int n, anz; hwcom.init();hwcom.setspeed(5); > for n = 0 ... 29 { WPnord[n]=0;WPeast[n]=0;} // Initialisieren der Variablen > Einlesen von Wegpunkten in die Arrayvariablen (z.B. WPnord[0]=180808,WPeast[0]=31603, > bereits umgerechnet in Bogensekunden über PC via hwcom) > run rechnen; > halt; > } // Ende thread main > thread rechnen > {int n, anz; float diffwegn[30], diffwege[30], winkel[30], errweg[30]; > string s40; > for n = 0 ... 29 { diffwegn[n]=0;diffwege[n]=0;winkel[n]=0;errweg[n]=0;} > // errechnen des Weges aus der Differenz von Position zum ersten Wegpunkt für > // Vektor Nord und Vektor East und des Winkels zum Wegpunkt in Metern. > // anz ist die eingegebene Menge der Wegpunkte. > for n = 0 ... anz-1 > {if (WPnord[n+1]-WPnord[n])==0 {diffwegn[n]=0;} // damit keine Division durch Null erfolgt > // Ergebnis der Division darf aber negativ sein > else {diffwegn[n]=(WPnord[n+1]-WPnord[n]*myconst.secnord;} // secnord= 30.90159 > if (WPeast[n+1]-WPeast[n]==0 {diffwege[n]=0;} // dasselbe für den Ostvektor > else {diffwege[n]=(WPeast[n+1]-WPeast[n])*myconst.seceast;} // seceast=19.49769 > errweg[n]=math.sqrt(math.sqr(diffwegn[n])+math.sqr(diffwege[n])); > // errechnen des Winkels > if diffwegn[n]==0 or diffwege[n]==0 { } // verhindern einer Division durch Null > else {winkel[n]=mathx.atang_korr(diffwege[n],diffwegn[n]);} > // diffwege(Ostvektor=x)/diffwegn(Nordvektor=y) = atang, sollte der Winkel herauskommen > str.putfloat(s40,winkel[n]);hwcom.print(s40);hwcom.ret(); > } // Ende for n ... > } // Ende thread rechnen > > Ich hoffe, daß ich nichts Wesentliches weggelassen habe. Das Übertragen der Wegpunkte > vom PC und das Umrechnen in Sekunden funktioniert als Bytearray, wird in Teilstrings > umgewandelt, und in einen Zahlenwert umgerechnet. Das ist nötig, da der Wegpunkt auch > einen Namen hat und die C-Control Unit nur Strings mit 30 Zeichen verarbeitet. > Die Eingabe der Sekundenwerte der Vektoren habe ich wie folgt gelöst: > // Extrahieren der Sekunden aus dem Bytearray > strx.split(c3[3],c7,'.'); > nordss1=strx.getNum(c7[0]); > nordss2=strx.getNum(c7[1]); > // nordss2 ergibt den Nachkomma Anteil, z.B. 8 nach getNum > nordss=nordss1+(nordss2/10*0.6); // *0.6 ist Umrechnung der sec von 100 auf 60 > WPnord[n] = nordgg + nordmm + nordss // nordgg=50*3600,nordmm=13*60 > > Da bekomme ich aber auch schon keine Nachkommastellen angezeigt, sondern gerundet. > > Gruß Lutz