ich habe mich schon die Tage an der Volumenberechnung eines liegenden Zylinders gemacht.
Leider bekomme ich immer noch unplausible Werte heraus.
Bei einem vollen Tank müssten um die 1.800 Liter rauskommen.
Als Ergebnis bekomme ich aber 136002 Liter.
double volumen = 0 ;
double L = 1.97 ;
double r = 1.08 ;
double h = 1.08 ;
double a = 0 ;
double b = 0 ;
double c = 0 ;
double d = 0 ;
double e = 0 ;
void setup() {
Serial.begin(9600);
Serial.print("r quadrat * L : ");
a = (square (r) * L);
Serial.println(a); // Ergebnis ok
Serial.print("acos ((r-h)/r) : ");
b = (acos((r - h) / r));
Serial.println(b); // Ergebnis nicht ok
Serial.print("(r-h) : ");
c = (r - h);
Serial.println(c); // Ergebnis ok
Serial.print("((Wurzel aus 2 * r * h - h2) / r2) : ");
d = (sqrt (2 * r * h - square (h)));
Serial.println(d); // Ergebnis ok
Serial.print("(d) / r2) : ");
e = (d / square (r));
Serial.println(e); // Ergebnis ok
Serial.print("Volumen : ");
volumen = (a*(b-c*d));
Serial.println(volumen);
Der Serialmonitor wirft mir folgende Ergebnisse heraus:
r quadrat * L : 2.30
acos ((r-h)/r) : 591.88
(r-h) : 0.00
((Wurzel aus 2 * r * h - h2) / r2) : 1.08
(d) / r2) : 0.93
Volumen : 1360.02
Hier nochmal die Formel die angewandt werden soll:
Hat jemand schon einmal so etwas berechnet oder kann mit jemand schon so auf die Sprünge helfen?
Wenn jemand bei einem Zylinder eine Variable mit r bezeichnet und damit den Durchmesser meint, betrachte ich das als krank.
Wieder mal ein schönes Beispiel, wie blöd solche unsprechenden Variablennamen sind.
Es sei denn es geht um Trennzeichen in Floats die in der Programmierung verwendet werden,
da ist das deutesche Komma ein Punkt, jedenfalls für den Kompiler.
Fritz911:
Bei einem vollen Tank müssten um die 1.800 Liter rauskommen.
double volumen = 0 ;
double L = 1.97 ;
double r = 1.08 ;
double h = 1.08 ;
Whandall:
Ein Zylinder der Abmessung von 1.97 * 1.08 (etwa 2 * 1) kann kein Volumen von über 1000 haben.
Jetzt verstehe ich Euch nicht.
Annahme1) Die 1,08m sind der Durchmesser und die Länge ist 1.97m. Das Volumen ist 1800 l = 1,8m^3
V= rrPilänge = 0,54m0,54m* 3,14*1,97m = 1,804m^3
also ist der Durchmesser falsch undd as angegebene Volumen stimmt laut ersten Post.
Annahme2) Die 1,08m sind der Radius und die Länge ist 1.97m. Das Volumen ist 1800 l = 1,8m^3
V= rrPilänge = 1,08m1,08m* 3,14*1,97m = 7,215m^3
also ist das Volumen falsch angegeben.
Fritz911:
Muss ich das generell eigentlich mit 0.54 oder mit 54 im Sketch angeben ?
Generell sollte man -wenn möglich- mit SI-Basiseinheiten (Meter, Volt, Amepere, Sekunde) rechnen. Auch sinnvolle Bezeichner wie r für Radius gehören dazu. Das hat den Vorteil, dass man keine Umrechnungsfaktoren beim Ergebnis berücksichtigen muss. Gerade mit Quadrieren und Wurzeln kann man sich Fehler hereinholen. Erst das Ergebnis sollte dann in die gewünschte Einheit umgerechnet werden z.B. Liter, Milliampere usw.
Spätestens wenn weitere physikalische Größen dazu kommen, dann wird es ohne SI-Basiseinheiten sehr unübersichtlich und fehlerträchtig.
Im Computer muss man schon mal eine Ausnahme machen, wenn man Integer-Arithmetik benutzen will. Dann muss man aber doppelt und dreifach aufpassen, sich nicht mit dem Komma und den Potenzen zu verhauen.
Whandall:
Es sei denn es geht um Trennzeichen in Floats die in der Programmierung verwendet werden,
da ist das deutesche Komma ein Punkt, jedenfalls für den Kompiler.
Das Blöde ist, dass manchmal nicht klar ist, ob das Code-Komma oder das andere gemeint ist. Ich verstehe 1.800 zuerst als 1800, bis klar ist, welche Komma-Sorte gemeint ist. Es ist blöd, dass sich das manchmal erst aus dem folgenden Text erschließt. Wenn dann die andere Sorte gemeint ist, nervt mich, dass ich die bislang gelesenen Sachen im Kopf „konvertieren“ muss. Ich höre dann oft einfach mit dem Lesen auf.