Problem beim zeichnen eines Ringes mit openGL (QUAD_STRIP)



  • Hallo,
    ich wollte einen Ring für eine Uhr mit OpenGL Programmieren mit GL_QUAD_STRIP.
    Das ganze sollte so funktionieren :

    glBegin(GL_QUAD_STRIP);
      float m;
      Uhrradius=10.0;
      Uhr_x=0;
      Uhr_y=10.0;
    
      Uhrradius=9.0;
      Uhr_x_=0.0;
      Uhr_y_=9.0;
    
      while(Uhr_x<10.0||Uhr_y_<10.0){
    
          m=(Uhrradius*Uhrradius)-(Uhr_x*Uhr_x);
    
          int count=0;
          //Wurzel ziehen
          while(count<10)
          {
                    Uhr_y=(Uhr_y+m/Uhr_y)/2;
                    count++;
          }
          //Malen des Äußeren Punktes 
          glVertex2f(Uhr_x,Uhr_y);
    
          m=(Uhrradius_*Uhrradius_)-(Uhr_x_*Uhr_x_);
    
          count=0;
          //Zweites Wurzelziehen
          while(count<10)
          {
                    Uhr_y_=(Uhr_y_+m/Uhr_y_)/2;
                    count++;
          }
          //Malen des Zweiten Punktes 
          glVertex2f(Uhr_x_,Uhr_y_);
    
          Uhr_x+=0.1;
          Uhr_x_+=0.1;
      }    
      glEnd();
    

    Also des ist ein Viertel des Ringes .
    Das errechnen der Punkte wird mit der Formel y2+x2=z^2
    z= Der Radius des Kreises. Wenn man das gnaze umformt sieht das dann so aus:
    y=Wurzel aus z2-x2.
    Die Wurzel näher ich mit dem Heronverfahren an.
    Der obere Rand des Ringes funktioniert aber der y Wert des unteren Randes ist ganz komisch.
    Bin noch ziemlich ein Anfänger also kann sein dass ich den Befehl einfach falsch benutze habe aber kein Fehler gefunden.
    Würde mich für jeden Typ freuen. Und schon mal im Vorraus ich weiß dass ich mit math.h einfachher die Wurzel ziehen kann.



  • Ich blicke zwar nicht durch, aber könnte es sein, dass du entweder in Zeile 3 oder 7 den Unterstrich für "Uhrradius_" vergessen hast ?



  • wurzelziehen funktioniert leider nicht so gut fuer negative zahlen...
    und so dinge wie sinus, cosinus, einheitskreis, math.h sind nix fuer dich?



  • Blue5teel schrieb:

    Ich blicke zwar nicht durch, aber könnte es sein, dass du entweder in Zeile 3 oder 7 den Unterstrich für "Uhrradius_" vergessen hast ?

    Ok danke!
    Habe komplett vergessen den Teil richtig nach Fehlern nachzugucken. Des hätte ich eigentlich selber finden sollen!
    Seit wann haben negative Zahlen eine Wurzel??? Hab immer gadacht negative Zahl mal negative Zahl ist eine positive Zahl und positive mal positive auch.
    Wie soll da dann eine negative Zahl rauskommen?
    Hab nur mal was davon gehört dass das dann die imaginären Zahlen wären aber naja als Neuntklässler hab ich da keine Ahnung von. 😃
    Also noch mal danke.



  • shorty0802 schrieb:

    Hab nur mal was davon gehört dass das dann die imaginären Zahlen wären aber naja als Neuntklässler hab ich da keine Ahnung von. 😃
    Also noch mal danke.

    Wennde gymnasial Info hast, könnte das schon nächses Jahr kommen. So wars bei mir...

    Wurzel(-1)=i; ein paar Potenzgesetze und schwupp, fertig!

    Zu deinem Problem:
    <cmath> rein und zum Wurzeln:
    sqrt(x)
    fabs(x) - Betrag
    sin/cos/tan hattet ihr das schon? Wenn nicht, das vereinfacht die Sache enorm... 😉

    Hier noch ein paar Infos:
    http://de.wikipedia.org/wiki/Sinus
    http://www2.hs-fulda.de/~klingebiel/c-stdlib/math.htm



  • Ja also auf dem Gymnasium bin ich schon aber naja wir machn so nen bissl mit Wurzel rechnen so nen paar Gesetze und des wars.
    Des mit Sinus Cosinus lese ich mir mal durch is warscheinlich hilfreich zu wissen, danke. Die math.h hat warscheinlich auch paar praktische Funktionen.
    Ciao



  • hellihjb schrieb:

    wurzelziehen funktioniert leider nicht so gut fuer negative zahlen...
    und so dinge wie sinus, cosinus, einheitskreis, math.h sind nix fuer dich?

    Ignoriert dieses Geschwafel, der Typ hier hat offensichtlich keine Ahnung von Kreisen. f'`8k

    Autocogito

    Gruß, TGGC (making great games since 1992)



  • Ich würde empfehlen mit komplexen Zahlen zu rechnen und diese Anschließend wieder in reelle umzuwandeln:

    Bsp:
    Kreis mit Radius 3, du willst alle 0,36° einen Punkt zeichnen.

    float zr = 3.0f;     // Radius
    float step = 0.36f;  // Schritt in Grad nach dem ein Punkt gezeichnet wird
    for(float f = 0.0f; f<360.0f; f+=step;)
    {
       draw( zr * cos(f) , zr * sin(f));   // draw( x, y )
    }
    

    Komplexe Zahlen bestehen aus einem Betrag r und einem Winkel phi. Schau einfach bei Wikipedia.

    Ich hoffe mein Codebeispiel stimmt, denke aber schon. 😉

    lg, Inufu

    Edit: Zu komplexen Zahlen: Wir haben die in der 9. in Mathe gelernt, in der 10. nochmal vertieft.


Anmelden zum Antworten