Turtle Grafik



  • Hallo zusammen,
    ich bin ein blutiger Anfänger und möchte eine Treppe zeichnen welche dann in einer extra zB .bmp datei angezeigt wird.
    Das alles möchte ich mit der Turtle Grafik machen welche ich bei wikipedia bereits gefunden habe.
    Leider weiß ich nicht wie ich beginnen soll...gibt es iwo Beispielprogramme oder hat schon mal jemand mit der Turtle Grafik gearbeitet?
    vielen Dank schon mal 😉



  • PPM (oder sogar PGM/PBM) ist vielleicht ein einfacheres Ausgabeformat. Das kannst du dann ja extern in BMP oder PNG umwandeln. (Wenn du ImageMagick installiert hast, kannst du einfach in der Konsole mit convert foo.ppm foo.bmp oder convert foo.ppm foo.png das Bild umwandeln. Aber gute Imageviewer können auch ppm direkt anzeigen)

    Hier ist n bisschen Code, den ich mal geschrieben habe und der dir n PPM ausgibt.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <stdint.h>
    #include <assert.h>
    
    enum {
      bpp = 3 // bytes per pixel
    };
    enum rgb { red = 0, green = 1, blue = 2 }; // rgb
    
    struct bitmap {
      unsigned width;
      unsigned height;
      uint8_t *buffer;
    };
    
    struct bitmap *create(unsigned width, unsigned height) {
      struct bitmap *b = malloc(sizeof(*b));
      if(!b) {
        return 0x0;
      }
      b->width = width;
      b->height = height;
      b->buffer = malloc(width * height * bpp);
      if(!b->buffer) {
        free(b);
        return 0x0;
      }
      memset(b->buffer, 0, width * height * bpp);
      return b;
    }
    
    void destroy(struct bitmap *b) {
      if(b) {
        free(b->buffer);
        free(b);
      }
    }
    
    uint8_t get_pixel(struct bitmap const *b, unsigned x, unsigned y, enum rgb color) {
      assert(b);
      return b->buffer[y * b->width*bpp + x*bpp + color];
    }
    
    void set_pixel(struct bitmap const *b, unsigned x, unsigned y, enum rgb color, uint8_t data) {
      assert(b);
      b->buffer[y * b->width*bpp + x*bpp + color] = data;
    }
    
    int write_ppm(char const *filename, struct bitmap const *b) {
      assert(b);
      FILE *fh = fopen(filename, "wb");
      if(!fh) {
        return -1;
      }
      fprintf(fh, "P3\n%u %u\n255\n", b->width, b->height);
      for(unsigned y = 0; y < b->height; ++y) {
        for(unsigned x = 0; x < b->width; ++x) {
          for(unsigned color = red; color <= blue; ++color) {
            fprintf(fh, "%u ", get_pixel(b, x, y, (enum rgb)color));
          }
        }
        fputc('\n', fh);
      }
      fclose(fh);
      return 0;
    }
    
    int main() {
      struct bitmap *b = create(800, 600);
      if(!b) {
        return 1;
      }
      for(unsigned x = 100; x <= 700; ++x) {
        set_pixel(b, x, 300, red, 0xff);
      }
      write_ppm("foo.ppm", b);
      destroy(b);
    }
    


  • Hi,
    vielen Dank für die schnelle antwort!!!


Anmelden zum Antworten