Frage: Thema Kugelkoordinaten mit cos/sin berechen



  • wie schon oben stand, steht alles in den Dokus zur standardbibliothek. Auch std::pi() duerfte eine Funktion in <math> sein, die dir pi in hinreichender Genauigkeit liefert. Und wie du eine Funktion anwendest sollte eigentlich klar sein.

    X = 1 * grad * 3.1415926535/180

    ist auf jeden Fall nicht richtig. Du hast doch die Formel fuer x oben hingeschrieben, und die sah etwas anders aus.



  • GT schrieb:

    hmmm also ok pi\180 * z.b. 20° also aber wie genau muss ich dann pi nehmen?

    3.1415926535 langt das dann?

    Besser:

    const double PI = std::acos( -1.0 );
    

    GT schrieb:

    und wäre dann X = 1 * grad * 3.1415926535/180 <---- soweit richtig
    aber wie geht des dann bei sinus?

    Du lässt am besten zwei Schleifen über Phi und Theta laufen, dann schreibt man die Berechnung von x,y und z in C++ wie folgt

    double r = 1.0;
        for( int phi = 10; phi < 180; phi += 10 )
        {
            for( int theta = 0; theta < 360; theta += 20 )
            {
                double x = r * cos(theta * PI/180) * sin(phi * PI/180);
                double y = r * sin(theta * PI/180) * sin(phi * PI/180);
                double z = r * cos(phi * PI/180); 
            }
        }
    

    .. ohne jede Optimierung.

    Gruß
    Werner



  • es gibt ein M_PI in der math/cmath. das sollte man auch benutzen...



  • es gibt ein M_PI in der math/cmath. das sollte man auch benutzen...

    Aber Vorsicht:

    The "Math Constants" are not defined in Standard C/C++. Therefore, in order to use them, you have to first define _USE_MATH_DEFINES and then include cmath or math.h as below.

    (Visual-C++ 2005 Doku)

    Grüße,

    Martin



  • vielen dank schonmal

    dann weder ich das mal austesten und mein versuchs ergebniss ihr kuntgeben



  • wie ich es anstelle weis ich jetzt aber jetzt wollte ich noch mal rat einholen für eine schleife

    int Punkt1;
    int Punkt2;
    int Punkt3;
    
        Punkt1 = radius * cos_d(0) * sin_d(0);
        Punkt2 = radius * sin_d(0) * sin_d(0);
        Punkt3 = radius * cos_d(0);
    

    cos_d und sin_d wandeln den wert in der klammer um.

    Wegen der schleife ich brauch da eine schleife die pro reihe 18 werte von theta schreibt immer mit dem selben phi wert

    und das 306 mal

    also ich brauch ne schleife die 0 - 360 hochzählt in 20er schritten das dann das theta sind dann 18 werte das bei einem gleichbleibenden phi wert angefangen bie 0 bis 180 in 10er schritten und die nachdem sie 360 erreicht hat bzw. 340 da ja 360 und 0 das selbe sind (aber kann man ja anders lösen) dann phi um 10 hochzählt

    und dann brauch ich dann immer die rechnung drin für die 3 punkte

    Punkt1 = radius * cos_d(0) * sin_d(0);
    Punkt2 = radius * sin_d(0) * sin_d(0);
    Punkt3 = radius * cos_d(0);

    also quasi 54 zahlen pro schleifendruchlauf
    da müsste ich dann eine schleife in ner schleife machen oder? also die bei phi 0 anfängt dann 0 -360 hochzählt für jeden schritt die 3 rechnungen macht und dann um 10 bei phi hochzählt

    also wär dann die erste schleife die phi ? oder die bei 360 erreicht phi um 10 erhöt und in der schleife muss dann die schleife sein die theta 0 -360 zählt und rechnet oder?

    oder kann mir wer nen beispiel geben?



  • Die doppelte Schleife wurde oben doch schon von Werner gepostet.
    Und wenn du dir angewöhnst, Punkte und Kommata etwas großzügiger zu benutzen, wirds sehr viel leichter, deine Sätze zu lesen und zu verstehen.

    Denn wenn man Sätze lesen muss bei denen jede Interpunktion das heißt Kommas und Punkte also Satzzeichen fehlt und die auch noch versucht zu verstehen dann kann das auf Dauer recht schwierig werden manche bekommen davon sogar Kopfschmerzen. 😉



  • tut mir leid



  • Verdammt das ist ja genau das was ich brauch. Doof das ich nicht drauf eingegangen bin.

    Das löst ja dann schon alle meine Probleme

    Vielen dank Werner Salomon und pumuckl ich versuch mich zu bessern. Ist eine angewohnheit von mir so zu schreiben.



  • /edit doppelpost 😞


Anmelden zum Antworten