Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Mosaike mit decideColor-Funktion erzeugen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.05.2006, 23:09 Uhr
tobiw



Hallo! Ich studiere Mechatronik und habe im dritten Semester EDV (C++) bekommen! Die anfänglichen Übungsblätter waren nicht so tragisch aber jetzt hänge ich an folgender Aufgabenstellung...

In dieser Aufgabe sollen die Versionen "Mosaic_1.c", ...., "Mosaic_6.c" implementiert werden, die den entsprechenden Mosaike erzeugen (Siehe die Mosaiken weiter unten).
Dabei soll jedes Mal nur der Inhalt der decideColor-Funktion mit Hilfe von if- oder switch-Anweisungen programmiert werden.


C++:
/*==========================================================================*/
//#include <stdlib.h>

#include <stdio.h>
#include <math.h>

#define SIZE 80
#define STONESIZE 4

FILE* psdatei;

/*==========================================================================*/

typedef enum { RED, GREEN, BLUE, WHITE, BLACK, GRAY, LIGTHGRAY,
               DARKGRAY, YELLOW, MAGENTA, CYAN, PINK, ORANGE } Color;

/*==========================================================================*/

Color decideColor( int x, int y ){
     /* Hier Programmieren */
     Color c;

     c=YELLOW;
     if ((y%2)!=0)
     {
          y=y-1;
     }
     if(((79-y)==x) ||((78-y)==x)  )
     {
             c = RED;                            //Erzeugt ein gelbes Bild mit rotem Strich durch
     }
     return c;
}

/*==========================================================================*/

/* PostScript header */
void begin( char* dateiname ) {
    psdatei = fopen( dateiname, "wt");
    if ( psdatei!=NULL ) {
        fprintf( psdatei, "%%!PS-Adobe-3.0 EPSF-3.0\n" );
        fprintf( psdatei, "%%%%BoundingBox: 0 0 %d %d\n",SIZE*STONESIZE,SIZE*STONESIZE);
    } else{
        printf("The function begin can't open the file %s\n", dateiname );      
    }
}

/*==========================================================================*/

/* PostScript end */
void end(void) {
    fprintf( psdatei,"showpage\n" );
    fclose( psdatei );
}

/*==========================================================================*/

/* Paint a square */
void square( float x, float y, float size ){
     fprintf(psdatei, "newpath\n");
     fprintf(psdatei, "%f %f moveto\n", x, y );
     fprintf(psdatei, "%f %f lineto\n", x, y+size );
     fprintf(psdatei, "%f %f lineto\n", x+size, y+size );
     fprintf(psdatei, "%f %f lineto\n", x+size, y );
     fprintf(psdatei, "%f %f lineto\n", x, y );
     fprintf(psdatei, "closepath\n");
        fprintf(psdatei, "fill\n");
     fprintf(psdatei, "stroke\n");  
}

/*==========================================================================*/

/* change the color */
void setColor( float r, float g, float b ) {
     fprintf(psdatei, "%f %f %f setrgbcolor\n", r, g, b);
}

/*==========================================================================*/

void RGB_Color( Color color ) {
      switch (color) {
             case        RED: setColor( 1.0, 0.0, 0.0 ); break;
            case      GREEN: setColor( 0.0, 1.0, 0.0 ); break;
              case       BLUE: setColor( 0.0, 0.0, 1.0 ); break;
             case      WHITE: setColor( 1.0, 1.0, 1.0 ); break;
            case      BLACK: setColor( 0.0, 0.0, 0.0 ); break;
            case   DARKGRAY: setColor( 0.3, 0.3, 0.3 ); break;
              case       GRAY: setColor( 0.5, 0.5, 1.5 ); break;
             case  LIGTHGRAY: setColor( 0.7, 0.7, 0.7 ); break;
            case     YELLOW: setColor( 1.0, 1.0, 0.0 ); break;
              case    MAGENTA: setColor( 1.0, 0.0, 1.0 ); break;
             case       CYAN: setColor( 0.0, 1.0, 1.0 ); break;
            case       PINK: setColor( 1.0, 0.7, 0.7 ); break;
              case     ORANGE: setColor( 1.0, 0.8, 1.0 ); break;
            default: printf("ERROR: Not a defined color!\n");
     }        
}

/*==========================================================================*/      

int main( void ) {
      int  x, y;
      Color color;
      char dateiname[50];
      printf("Bitte eine Postscript-Dateiname (*.ps) eingeben: ");
      scanf("%s", &dateiname);
      
      begin( dateiname );
      
      for ( x=0 ;  x<SIZE;  x++ ) {
          for ( y=0 ;  y<SIZE;  y++ ) {
               color = decideColor(x,y);
               RGB_Color( color );
               square( x*STONESIZE, y*STONESIZE, STONESIZE );
          }
      }
      
      end();
      
      //system("PAUSE");
      return 0;
}

/*==========================================================================*/



Hier sind die zu erzeugenden Mosaike die ich nicht hinbekomme!

www.carhifi-tuner.de/skbilder/m1.gif
www.carhifi-tuner.de/skbilder/m2.gif
www.carhifi-tuner.de/skbilder/m3.gif

Kann mir vielleicht jemand einen Tipp geben wie ich das machen soll? Es waren insgesammt 9 und diese 3 bekomme ich absolut nicht hin!

MfG Tobi

mod edit: BENUTZE DIE CPP TAGS SELBER

Dieser Post wurde am 03.05.2006 um 00:02 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.05.2006, 12:48 Uhr
Th



Tips zu den drei Mosaiken:

zu 1. Unterscheide nach gerader und ungerader Zeile (y-Wert), bei gerader alle 5 Punkte (x % 5), bei ungerader alle 10 Punkte einen roten Punkt setzen (nun nur noch Offset pro Zeile richtig bestimmen -)

zu 2. du mußt pro Zeile unterscheiden, ob der x-Wert links oder rechts neben der Diagonalen ist (y < x bzw. y > SIZE_X-x), dann zwischen den Diagonalen die selbe Farbe benutzen (rot oder blau je nach gerader bzw. ungerader Zeile) und sonst je nach geradem oder ungeradem x-Wert rot bzw. blau.

zu 3. einfach schauen, ob der (Euklidische) Abstand des Punktes (x,y) zum Mittelpunkt (SIZE_X/2, SIZE_Y/2) größer als SIZE_X/4 ist, dann schwarz, sonst weiß.

Das auszuprogrammieren, ist jetzt deine Sache...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: