Kreis zeichnen..Formel in übersetzen...



  • Hallo, ich habe

    y0 = 0   
     	for x=-R to R do   
     	y1 = sqrt(R*R - x*x)   
     	for y= y0 to y1 do   
     	plot(x,y); plot(x,-y)   
     	endfor   
     	y0 = y1   
     	endfor
    

    und brauche das übersetzt in C...

    Ich bin bisslang bei

    int x;
      int y0;
      int y1;
      int r =10;
           y0 = 0;
           for (x=0; -R < R; r++)
           {
           y1 = sqrt(R*R - x*x)
           for y= y0 to y1
            {
            plot(x,y); plot(x,-y)
            }
           y0 = y1
           }
      }
    

    leider ist das in Pascal irgendwie einfacher...



  • y0 = 0                        y0=0;
    for x=-R to R do              for (x=-R; x<=R; ++x){
      y1 = sqrt(R*R - x*x)           y1 = sqrt(R*R - x*x);
      for y= y0 to y1 do             for (y=y0; y<=y1; ++y){
        plot(x,y); plot(x,-y)           plot(x,y); plot(x,-y);
      endfor                         }
      y0 = y1                        y0=y1;
    endfor                        }
    


  • y0 = 0   
    for x=-R to R do   
    	y1 = sqrt(R*R - x*x)   
    	for y= y0 to y1 do   
    		plot(x,y); plot(x,-y)   
    	endfor   
    	y0 = y1   
    endfor
    

    wird zu

    float y0 = 0; 
    for(float x=-R; x<R; x++)
    {   
    	float y1 = sqrt(R*R - x*x);
    	for(float y=y0; y<y1; y++)
    	{
    		plot(x,y);
    		plot(x,-y); 
    	}   
    	y0 = y1; 
    }
    

    Wo ist das Problem ? 😕
    Kann man doch 1:1 umschreiben. Nur die plot Funktion und R fehlen.



  • also
    for(int x=-R; x<R; x++)

    akzeptiert mein Compiler nicht..falscher Ausdruck, er erwartet ein ; irgendwo..

    Das erste Beispiel frißt er nach einigen anpassungen..nur leider ist es kein Kreis, sondern eine nach oben geschwungene Linie??!

    y0=0;
                    for (x=-R; x<=R; ++x){
                     y1 = sqrt(R*R - x*x);
                      for (y=y0; y<=y1; ++y){
                       TFT_Dot(x,y, CL_YELLOW); TFT_Dot(x,-y, CL_YELLOW);
                    }
                      y0=y1;
                      }[code="c"][code="cpp"]
    


  • Formatier deine Codeausschnitte bitte richtig, so sieht das nicht schön aus.

    akzeptiert mein Compiler nicht..falscher Ausdruck, er erwartet ein ; irgendwo..

    Irgendwo hilft uns nichts. gib uns den Code (mit Zeilennummern falls länger) und die genaue Fehlermeldung.



  • das ist alles an code..außer int main 🙂

    signed int x = 50;
        signed int y = 50;
        signed int y1;
        signed int r =50;
        signed int y0 = 50;
                   y0=0;
                  for (x=-R; x<=R; ++x){
                   y1 = sqrt(R*R - x*x);
                  for (y=y0; y<=y1; ++y){
                   TFT_Dot(x,y, CL_YELLOW); TFT_Dot(x,-y, CL_YELLOW);
                  }
                  y0=y1;
                  }
    


  • Und wo ist R definiert?

    Wo ist denn der Koordinatenursprung von deinem Display?
    Etwa unten links?

    Der Kreis wird um (0;0) gezeichnet, darum siehst du nur einen Quadranten.



  • nein, vorher hatte ich alles auf 0 und nur r auf 50...das waren bloß die letzten versuche...


  • Mod

    C ist case-sensitiv. Aber Pascal doch auch?



  • SeppJ schrieb:

    Aber Pascal doch auch?

    Nein?



  • ach Mißt...offenbar ist das so richtig...hmpf..nicht zu ende gelesen..
    http://www-i1.informatik.rwth-aachen.de/~algorithmus/algo32.php

    Nein, Pascal interessiert groß und klein nicht



  • oh man!!
    ganz unten steht der Link zum C Beispielcode..*patsch*!!



  • DirkB schrieb:

    Etwa unten links?

    Sorry, ich meinte oben links.

    int x0 = 50, y0 = 50; // Mittelpunkt vom Kreis
    
        int R = 50;  // Radius
        int y1,y2;
    
        y1=0;
        for (x=-R; x<=R; ++x){
          y2 = sqrt(R*R - x*x);
          for (y=y0; y<=y1; ++y){
            TFT_Dot(x0+x,y0+y, CL_YELLOW); TFT_Dot(x0+x,y0-y, CL_YELLOW); 
            // es gibt noch mehr Symetrien
          }
          y1=y2;
        }
    


  • so ein Frust..bei Pascal geht das fast immer von einem zum anderen zu portieren..hier gibt es eine Fehlermeldung bei zeile 37 😞
    Er bemängelt das Int, er erwartet aber eine Funktion?!

    #include <iostream>
    #include <vector>
    #include <math.h>
    
    int res_x = 1024;
    int res_y = 968;
    std::vector<bool> pixel;
    
    void plot(int _x, int _y)
    {
      //the center of the circle is always center of the image
      _x += res_x/2;
      _y += res_y/2;
      if (_x < 0 || _x >= res_x || _y < 0 || _y >= res_y)
        return;
      else
        pixel[res_x * _y + _x] = true;
    }
    
    int main()
    {
      int R = 100;
      int x = 0;
      int y = 0;
      int F = 0;
    
      //clear image
      pixel.resize(res_x*res_y,0);
    
      ///Algorithm 1 (Naiver Algorithmus für N=7R)
    
        for (int j = 0; j < 7*R; ++j)
        {
          x = int (float(R) * cos(2.0*M_PI*float(j)/float(7*R)));
          y = int(float(R) * sin(2.0*M_PI*float(j)/float(7*R)));
          plot (x,y);
        }
    
      ///Algorithm 2 (Verbesserter Naiver Algorithmus)
        int y1 = 0;
    
        //9:00 - 12:00
        int y0 = 0;
        for (x = -R; x <= 0; ++x)
        {
          y1 = int(sqrt(R*R - x*x));
          for (y = y0; y <= y1; ++y)
          {
            plot(x,y); plot(x,-y);
          }
          y0 = y1;
        }
        //3:00 - 12:00
        y0 = 0;
        for (x = R; x > 0; --x)
        {
          y1 = int(sqrt(R*R - x*x));
          for (y = y0; y <= y1; ++y)
          {
            plot(x,y); plot(x,-y);
          }
          y0 = y1;
        }
    
      ///Algorithm 3 (Verbesserter Bresenham-Algorithmus)
    
        x = 0; y = R;
        F = 1 - R;
        while (x < y)
        {
          ++x;
          if (F < 0)
          {
            F += 2*x - 1;
          }
          else
          {
            F += 2*(x - y);
            --y;
          }
          plot(x,y), plot(y,x);
          plot(-x,y), plot(y,-x);
          plot(x,-y), plot(-y,x);
          plot(-x,-y), plot(-y,-x);
        }
    
      return 0;
    }
    


  • Tja das kommt immer dabei raus, wenn man ohne Sinn und Verstand drauflos hackt; in jeder Programmiersprache. Wenigstens Grundlagen sollte man können, und nicht nur Zeile 37 ist dir misslungen.



  • ??
    wieso mir?
    Das ist die originalvorlage der uni aus dem Link....



  • Es fällt unmittelbar auf, dass das C++ ist und nicht C. Beim zweiten Blick fällt auf, dass die Konstante M_PI verwendet wird, deren Definition in math.h vom Standard nicht gefordert wird (es ist eine gnu-Erweiterung meines Wissens). Wahrscheinlich funktioniert der Code auf dem Compiler, mit dem er ursprünglich geschrieben wurde. Wahrscheinlich kann ihn jeder minimal kompetente C++-Programmierer zum Laufen bringen. Aber so absolut gar keine Ahnung zu haben ist einfach schlecht.



  • das ist das Problem bei einem c neuling....



  • Ich bin mir sehr sicher, dass du (und deine Uni-Lehrer) den Unterschied zwischen

    float(R)
    und
    (float)R bzw. (float)(R)
    

    NICHT kennen, und demzufolge auch nicht den zw. C und C++. (frei nach dem Motto: der Compiler mäkelt nicht (mehr), also ist der Code OK, wobei es auch völlig egal ist, ob "der Compiler" nun ein C oder C++ Compiler ist)

    Das ist die originalvorlage der uni aus dem Link....

    Wenn du gedacht hast, an der Uni Programmieren oder Softwareentwicklung zu lernen, hast du dich (wie alle anderen Kommilitonen auch) geirrt.
    Programmieren und Softwareentwicklung lernt niemand an der Uni, weil es dort nicht gelehrt wird, was an der Qualität des dortigen Lehrpersonals liegt.
    Maximal werdet ihr an der Uni lernen, wie man mit zusammengegoogeltem Halbwissen irgendwelche PP-Präsentationen erstellt oder wie man mit zusammengegoogeltem Halbwissen IT-Projekte managt.



  • corado schrieb:

    Das ist die originalvorlage der uni aus dem Link....

    Wie man schon an der Endung .cc sieht, handelt es sich um ein C++-Programm für den GCC, besser G++. Die Kompilierung geschieht mit:

    g++ circles.cc

    So kompiliert es bei mir ohne irgendwelche Meckerei auf MinGW, CygWin und Wheezy. Allerdings gibt das Programm nichts aus, die Ausgabe musst Du noch hinzubasteln.

    viele grüße
    ralph


Anmelden zum Antworten