Wie kann man zählen wie oft eine schleife durchläuft?
-
Ja ich bin halt nicht sonderlich gut in Gramatik und Rechtschreibung. Tut mir echt
Leid.Was die 308 betrifft meinte ich ja das sie 306 mal durchläuft und immer 3 Werte reinschreibt. Und die letzten 2 Werte schreib ich dann manuell rein.
Und man kann das echt nicht anderster rauskriegen die 306?
-
GT schrieb:
...die letzten 2 Werte schreib ich dann Manuel rein....
Was kann der arme Manuel denn dafür ?

Gruß,
Simon2.
-
GT schrieb:
Und man kann das echt nicht anderster rauskriegen die 306?
Nunja, dir wurden bisher zwei Moeglichkeiten genannt:
a) Zehler mitlaufen lassen, dann weisst dus hinterher.
b) Wenn alle Bedingungen vorher bekannt sind (wie in deinem Fall hier), einfach ausrechnen wie oft die Schleife durchaufen wird. In deinem Fall sinds geschachtelte Zaehlschleifen, die Zaehlvariable wird nicht geaendert, also ist die jeweilige Anzahl der Durchlaeufe nur abhaengig vom Startwert, Endwert und der Schrittweite. Die Rechnung dazu ist folgene:int min, max, step; //startwert, endwert, schrittweite int nloop = (max - min - 1)/step + 1; if (nloop < 1) nloop = 1;Die letzte Abfrage tritt nur in Kraft, wenn max < min ist, sonst wuerden da negative Werte rauskommen, was nicht gut moeglich ist. Die Schleife wird schliesslich mindestens einmal durchlaufen.
Jetzt berechnet man nloop fuer die innere und aeussere Schleife und mitlipliziert das ganze miteinander. Spezialisiert auf deinen Fall, wo ja nur die Schrittweite fuer phi und theta veraenderbar sind, kommt dann folgendes bei raus:int step_phi, step_theta; int nloop, nloop_phi, nloop_theta; step_phi = /*20*/; step_theta = /*10*/; nloop_phi = 359/step_phi + 1; // = 17 + 1 = 18 nloop_theta = (179-step_theta)/step_theta + 1; // = 16 + 1 = 17 nloop = nloop_theta + nloop_phi; // = 17 * 18 = 306 //deine Schleife: for( int theta = step_theta; theta < 180; theta += step_theta ) { for( int phi = 0; phi < 360; phi += ste_phi ) { //... } }Ich hab mir mal die Freiheit rausgenommen, die Kugelkoordinaten theta und phi so zu benutzen wie sie normalerweise benutzt werden, wie ich oben schon geschrieben hatte hast du das vertauscht

Verscuh meinen Fetzen mal mit anderen Werten fuer step_theta und step_phi, du wirst sehn dass genau die richtige Zahl an loops bei rauskommt, wenn du den counter noch drinlaesst.
-
Danke für die Erklärung.

Ok das probier ich aus! Aber wenigstens ists mir beim lesen jetzt schon klar.
Du hast dich da verschrieben
nloop = nloop_theta + nloop_phi; // = 17 * 18 = 306ist * nicht +
-
Aber wenn du sagst theta und phi ist verdreht. Ist dann die Rechnung noch richtig?
double x = radius * cos(theta) * sin(phi);
double y = radius * sin(theta) * sin(phi);
double z = radius * cos(phi);
bzw.
x = r * cos_d(0) * sin_d(180);
y = r * sin_d(0) * sin_d(180);
z = r * cos_d(180);
muss ich dann die werte in den Klammern tauschen?
dann kommen aber andere ergebnisse raus die dann keien Kugel mehr ergeben bzw. ein Punkt ist anders.
-
Natuerlich musst du auch da dann theta und phi vertauschen. So wie dus vorher gemacht hast kam natuerlich das richtige bei raus, du hast halt den Winkel, der von Pol zu Pol geht, phi genannt, und den Winkel in der x-y-Ebene theta. In jedem Fetzen Literatur, der in irgendeiner Art mit Kugelkoordinaten umgeht, wirds aber genau andersrum gehandhabt. Ist halt kein Muss, aber Konvention, und wenn man sich an die haelt kommt man nicht durcheinander wenn man ploetzlich was anderes liest
