Bilder oben (nur drei Beispiele von vielen): Nach dem Start des Programms werden mit der Maus ein paar Linien und Punkte (Keimzellen) an beliebige Stellen des "Spielfeldes" gezeichnet, die sofort beginnen, sich zu miteinander verschmelzenden Kreisen auszudehnen und bald die ganze Fläche mit einem Muster füllen, das an sich bewegende Wellen auf Wasser erinnert. Sobald man jedoch per Maus die Parameter 1 bis 4 vorsichtig verändert, bricht schnell das Chaos aus und es entstehen Muster wie oben gezeigt, die jedoch sehr instabil sein können.Wenn man Pech hat, endet das Ganze in einem unangenehmen Flimmern des Bildes zwischen mehreren Farben, so dass man das Programm besser beendet und von vorn beginnt. Dieses Programmbeispiel zeigt einmal mehr die rasend schnelle Grafikverarbeitung von Processing.

 

 

 Wachstumsfunktion 1

 

Der unten stehende Programmcode kann mittels Copy und Paste direkt in den leeren, geöffneten Processing Editor kopiert werden und sollte zumindest unter Windows 7 direkt nach dem Start funktionieren, wenn zusätzlich die zum Download bereitstehende Grafik eingebunden wird (siehe ganz unten).

Achtung: Das Verzeichnis, in welchem sich die Datei des Processing Quellcodes befindet (Dateiname.pde) muss den gleichen Namen wie die Quellcode-Datei besitzen.

 

Die grafische Benutzeroberfläche ist nicht Bestandteil von Processing und wir in diesem Programm als Grafik eingebettet. Der betreffende Steuer-Code ist im folgenden Listing enthalten. Erfahrene Programmierer können ihn problemlos zur Erzeugung eigener grafischer Oberflächen zweckentfremden. Hinweise zu den Eigenschaften des Programms und seiner Bedienung finden Sie unter dem folgenden Link:

 

Bedienung und Spielverlauf

 

Startseite

 

Hinweis 1:

Auf Grund der begrenzten Zeilenbreite kann es vorkommen, dass zusätzliche, nicht vorgesehene Zeilenumbrüche auftreten, die keine Auswirkungen haben und bei Zurückkopieren in den geöffneten Processing-Editor verschwinden.

 

Hinweis 2:

Damit das Programm läuft, muss zusätzlich die grafische Oberfläche, die diesmal als fertige Grafik eingebunden wird, heruntergeladen werden (siehe ganz unten). Die betreffende Datei muss sich im selben Verzeichnis befinden, wie das Programm selber.

 

Programmcode

 

 

// Source Code: Kurt Diedrich 

// Only private use

 

int[][] array1 = new int[500][700];

int[][] array2 = new int[1500][1500];

int[][] array3 = new int[1500][1500];

int[][] array4 = new int[1500][1500];

// int[][] array5 = new int[1500][1500];

 

int[][] Farbarray = new int[1024][3]; // Farbpalette

 

int hor;

int vert;

 

int threshold1 = 120;

int threshold2 = 255;

int threshold3 = 90;

int threshold4 = 60;

int threshold5 = 10;

 

 

int n;

int m;

int q;

int red ;

int green ;

int blue ;

int flag;

 

void setup()

{

 size(862,594);

  PImage img;

  img = loadImage("Oberflaeche_1.jpg");

  image(img, 0, 0);  

  

  // Textfeld Threshold 1

          noStroke();

          fill(255,255,255);

          rect(736,300,40,20);

          fill(0,0,0);

          text(threshold1, 738, 312);   

          

  // Textfeld Threshold 2        

          fill(255,255,255);

          rect(736,340,40,20);

          fill(0,0,0);

          text(threshold2, 738, 352);   

          

  // Textfeld Threshold 3            

          fill(255,255,255);

          rect(736,380,40,20);

          fill(0,0,0);

          text(threshold3, 738, 392);  

          

   // Textfeld Threshold 4        

          threshold4 = threshold4 - 1;  

          noStroke();

          fill(255,255,255);

          rect(736,420,40,20);

          fill(0,0,0);

          text(threshold4, 738, 432);     

        

        

        

        fill_farbarray();  

}

 

 

 

void draw()

 

{

 if (mousePressed)

 

 {

  

  // Anzeige der Mauskoordinaten

// noStroke();

// fill(255,255,255);

 //  rect(720,400,100,20);

 // fill(0,0,0);

//   text("X: " + mouseX + "   " + "Y: " +mouseY, 722, 410);

   

   

  // Abfrage der Buttons

   

   if((mouseX>735) & (mouseX<825))

   {

    if((mouseY>20) & (mouseY<40))    { flag = 1; }   

  

  // Threshold 1 #################################################

   

    if((mouseX>735) & (mouseX<775) & (mouseY>60) & (mouseY<80))    

        { 

          threshold1 = threshold1 - 1;  

          noStroke();

          fill(255,255,255);

          rect(736,300,40,20);

          fill(0,0,0);

          text(threshold1, 738, 312);      

        }

           

    if((mouseX>785) & (mouseX<825) &(mouseY>60) & (mouseY<80))  

       { 

          threshold1 = threshold1 + 1;  

          noStroke();

          fill(255,255,255);

          rect(736,300,40,20);

          fill(0,0,0);

          text(threshold1, 738, 312);      

        }

        

    // Threshold 2 #################################################

   

    if((mouseX>735) & (mouseX<775)&(mouseY>100) & (mouseY<120))  

  

       { 

          threshold2 = threshold2 - 1;  

          noStroke();

          fill(255,255,255);

          rect(736,340,40,20);

          fill(0,0,0);

          text(threshold2, 738, 352);      

        }

 

    if((mouseX>785) & (mouseX<825)&(mouseY>100) & (mouseY<120))

       { 

          threshold2 = threshold2 + 1;  

          noStroke();

          fill(255,255,255);

          rect(736,340,40,20);

          fill(0,0,0);

          text(threshold2, 738, 352);      

        }

    

   // Threshold 3 #################################################

   

    if((mouseX>735) & (mouseX<775)&(mouseY>140) & (mouseY<160))  

  

       { 

          threshold3 = threshold3 - 1;  

          noStroke();

          fill(255,255,255);

          rect(736,380,40,20);

          fill(0,0,0);

          text(threshold3, 738, 392);      

        }

 

    if((mouseX>785) & (mouseX<825)&(mouseY>140) & (mouseY<160))

       { 

          threshold3 = threshold3 + 1;  

          noStroke();

          fill(255,255,255);

          rect(736,380,40,20);

          fill(0,0,0);

          text(threshold3, 738, 392);      

        }

   

    // Threshold 4 #################################################

   

    if((mouseX>735) & (mouseX<775)&(mouseY>180) & (mouseY<200))  

  

       { 

          threshold4 = threshold4 - 1;  

          noStroke();

          fill(255,255,255);

          rect(736,420,40,20);

          fill(0,0,0);

          text(threshold4, 738, 432);      

        }

 

    if((mouseX>785) & (mouseX<825)&(mouseY>180) & (mouseY<200))

       { 

          threshold4 = threshold4 + 1;  

          noStroke();

          fill(255,255,255);

          rect(736,420,40,20);

          fill(0,0,0);

          text(threshold4, 738, 432);      

        } 

   

    

 

 if((mouseX>785) & (mouseX<825)&(mouseY>220) & (mouseY<240))  

        {

         flag=0; 

         for(m=0;m<=499;m++)

        {

            for (n=0;n<=699;n++)

          

            {

              array1[m][n] =0;

              array2[m][n] =0;

              array3[m][n] =0;

              array4[m][n] =0;

              //array5[m][n] =0;

              set(n, m, color(0,0,60));  

            }

        }

       

        }

     

  if((mouseX>735) & (mouseX<775)&(mouseY>220) & (mouseY<240))   {flag=0; }

   }

  

  

    // Setzen eines "Zündungspixels" 

    if((mouseX<700)& (mouseX>0) & (mouseY>0) & (mouseY<499))

    { set(mouseX, mouseY, color(0, 255, 0));

      array1[mouseY][mouseX]=250;

    }

   

 }

 

 if (flag==1){calculate();}

 

 

void calculate()

{

 

     for(m=0;m<=499;m++)

        {

            for (n=0;n<=699;n++)          

            {       

                    

              if (array1[m][n] > threshold1) // threshold1 = 120 default, array1 = 250 by mouse

              // bedingung erfüllt by default

                { 

                             

                   if((n < 698) & (m < 498) & (n > 1) & (m > 1)) 

                  {                                  

                         array2[m] [n+1]   = array2[m] [n+1]+threshold5; // 10 by default

                         array2[m] [n-1]   = array2[m] [n-1]+threshold5;

                         array2[m+1] [n+1] = array2[m+1] [n+1]+threshold5;

                         array2[m+1] [n-1] = array2[m+1] [n-1]+threshold5;

                         array2[m+1] [n]   = array2[m+1] [n]+threshold5;

                         array2[m-1] [n+1] = array2[m-1] [n+1]+threshold5;

                         array2[m-1] [n-1] = array2[m-1] [n-1]+threshold5;

                         array2[m-1] [n]   = array2[m-1] [n]+threshold5;

                 

                         array2[m][n] = array1[m][n];   // Kopiere a1 nach a2 ????                                 

                  }                     

                }  

            

             if (array3[m][n] > 1) // Wenn array3 nicht leer. Array3 stellt für jede einzelne Zelle

            // einen individuellen Timer dar, der jedesmal um 1 vermindert wird.

            // Solange der Timer nicht abgelaufen ist, werden die Zellen von Array2 um trheshold3 vermindert.

            // Wenn t5 > t3, dann wachsen die Werte in Array2

             {

               array2[m][n]= array2[m][n]-threshold3;               

               array3[m][n]= array3[m][n]-1;               

             }

             

              if (array1[m][n] <0) {array1 [m][n] =0;} // Standard-Überlaufbremse

               if (array2[m][n] <0) {array2 [m][n] =0;}

                if (array3[m][n] <0) {array3 [m][n] =0;}

                 if (array4[m][n] <0) {array4 [m][n] =0;}

            

           } // Next 1

       } // Next 2

       

    

        for(m=0;m<=499;m++)

        {

          for (n=0;n<=699;n++)

           {    

              if (array2[m][n] > 250 ) // Droht Array2 überzulaufen, wird es auf tr2 zurückgesetzt. Der Timer Array3 wird neu gesetzt (Tr4)

                      {

                        array2[m][n] = threshold2; // default = 255

                        array3[m][n] = threshold4; //array3 ist wieder frei, so dass in Array2 neu gezeichnet werden kann                   

                      }

                    

          

              //Kopieren von array2 in array1

                 array1[m][n] = array2[m][n];

          

               if (array4[m][n] != array1[m][n]) 

           

                      {

                       // Indirekte Bestimmung der Farben aus farbarray

                       

                       if (array1[m][n] >255) {array1[m][n] = 255;}

                       if (array1[m][n] <0) {array1[m][n] = 0;}

                       

                       red = Farbarray[array1[m][n]] [0];                     

                       green = Farbarray[array1[m][n]] [1];                        

                       blue = Farbarray[array1[m][n]] [2];  

                                               

                       set(n, m, color(red,green,blue));  

                      }

                array4[m][n]= array2[m][n]; // Array 4 ist Vorher-Zustand. Feststellung des Unterschiedes zum vorherigen Durchlauf.

                                               // Was hat sich geändert? Zeichne nur die Änderungen neu. Das spart Zeit.                 

           }          

        } 

            

//}       

       

       

}

 

 

// #########################################################################################################

// ######                                                                                             ###### 

// ######                                           Farbarray                                         ###### 

// ######                                                                                             ###### 

// #########################################################################################################

   void fill_farbarray()

 

 {

   

    //Füllen des Farbarrays 

 

             for (n = 0; n<=3; n++)             {Farbarray[n][0] = 0 ; Farbarray[n][1] = 0 ; Farbarray[n][2] = 20 ;}

/* 2   */    for (n = 4; n<=7; n++)             {Farbarray[n][0] = 0 ; Farbarray[n][1] = 16 ; Farbarray[n][2] = 75 ;}

             for (n = 8; n<=11; n++)            {Farbarray[n][0] = 0 ; Farbarray[n][1] = 33 ; Farbarray[n][2] = 132 ;}

/* 4   */    for (n = 12; n<=15; n++)           {Farbarray[n][0] = 0 ; Farbarray[n][1] = 36 ; Farbarray[n][2] = 144 ;}

             for (n = 16; n<=19; n++)           {Farbarray[n][0] = 0 ; Farbarray[n][1] = 39 ; Farbarray[n][2] = 157 ;}

/* 6   */    for (n = 20; n<=23; n++)           {Farbarray[n][0] = 34 ; Farbarray[n][1] = 18 ; Farbarray[n][2] = 156 ;}

             for (n = 24; n<=27; n++)           {Farbarray[n][0] = 67 ; Farbarray[n][1] = 2 ; Farbarray[n][2] = 155 ;}

/* 8   */    for (n = 28; n<=31; n++)           {Farbarray[n][0] = 80 ; Farbarray[n][1] = 2 ; Farbarray[n][2] = 155 ;}

             for (n = 32; n<=35; n++)           {Farbarray[n][0] = 94 ; Farbarray[n][1] = 2 ; Farbarray[n][2] = 155 ;}

/* 10  */    for (n = 36; n<=39; n++)           {Farbarray[n][0] = 120 ; Farbarray[n][1] = 1 ; Farbarray[n][2] = 159 ;}

             for (n = 40; n<=43; n++)           {Farbarray[n][0] = 143 ; Farbarray[n][1] = 0 ; Farbarray[n][2] = 164 ;}

/* 12  */    for (n = 44; n<=47; n++)           {Farbarray[n][0] = 154 ; Farbarray[n][1] = 0 ; Farbarray[n][2] = 151 ;}

             for (n = 48; n<=51; n++)           {Farbarray[n][0] = 164 ; Farbarray[n][1] = 0 ; Farbarray[n][2] = 139 ;}

/* 14  */    for (n = 52; n<=55; n++)           {Farbarray[n][0] = 160 ; Farbarray[n][1] = 1 ; Farbarray[n][2] = 118 ;}

             for (n = 56; n<=59; n++)           {Farbarray[n][0] = 155 ; Farbarray[n][1] = 2 ; Farbarray[n][2] = 98 ;}

/* 16  */    for (n = 60; n<=63; n++)           {Farbarray[n][0] = 155 ; Farbarray[n][1] = 2 ; Farbarray[n][2] = 72 ;}

             for (n = 64; n<=67; n++)           {Farbarray[n][0] = 155 ; Farbarray[n][1] = 2 ; Farbarray[n][2] = 45 ;}

/* 18  */    for (n = 68; n<=71; n++)           {Farbarray[n][0] = 161 ; Farbarray[n][1] = 2 ; Farbarray[n][2] = 58 ;}

             for (n = 72; n<=75; n++)           {Farbarray[n][0] = 168 ; Farbarray[n][1] = 2 ; Farbarray[n][2] = 52 ;}

/* 20  */    for (n = 76; n<=79; n++)           {Farbarray[n][0] = 178 ; Farbarray[n][1] = 2 ; Farbarray[n][2] = 55 ;}

             for (n = 80; n<=83; n++)           {Farbarray[n][0] = 189 ; Farbarray[n][1] = 2 ; Farbarray[n][2] = 58 ;}

/* 22  */    for (n = 84; n<=87; n++)           {Farbarray[n][0] = 202 ; Farbarray[n][1] = 2 ; Farbarray[n][2] = 62 ;}

             for (n = 88; n<=91; n++)           {Farbarray[n][0] = 215 ; Farbarray[n][1] = 2 ; Farbarray[n][2] = 66 ;}

/* 24  */    for (n = 92; n<=95; n++)           {Farbarray[n][0] = 222 ; Farbarray[n][1] = 2 ; Farbarray[n][2] = 68 ;}

             for (n = 96; n<=99; n++)           {Farbarray[n][0] = 230 ; Farbarray[n][1] = 2 ; Farbarray[n][2] = 70 ;}

/* 26  */    for (n = 100; n<=103; n++)         {Farbarray[n][0] = 241 ; Farbarray[n][1] = 2 ; Farbarray[n][2] = 48 ;}

             for (n = 104; n<=107; n++)         {Farbarray[n][0] = 252 ; Farbarray[n][1] = 1 ; Farbarray[n][2] = 27 ;}

/* 28  */    for (n = 108; n<=111; n++)         {Farbarray[n][0] = 252 ; Farbarray[n][1] = 28 ; Farbarray[n][2] = 14 ;}

             for (n = 112; n<=115; n++)         {Farbarray[n][0] = 252 ; Farbarray[n][1] = 57 ; Farbarray[n][2] = 1 ;}

/* 30  */    for (n = 116; n<=119; n++)         {Farbarray[n][0] = 250 ; Farbarray[n][1] = 42 ; Farbarray[n][2] = 2 ;}

             for (n = 120; n<=123; n++)         {Farbarray[n][0] = 249 ; Farbarray[n][1] = 27 ; Farbarray[n][2] = 2 ;}

/* 32  */    for (n = 124; n<=127; n++)         {Farbarray[n][0] = 248 ; Farbarray[n][1] = 46 ; Farbarray[n][2] = 2 ;}

             for (n = 128; n<=131; n++)         {Farbarray[n][0] = 248 ; Farbarray[n][1] = 65 ; Farbarray[n][2] = 3 ;}

/* 34  */    for (n = 132; n<=135; n++)         {Farbarray[n][0] = 250 ; Farbarray[n][1] = 82 ; Farbarray[n][2] = 2 ;}

             for (n = 136; n<=139; n++)         {Farbarray[n][0] = 252 ; Farbarray[n][1] = 101 ; Farbarray[n][2] = 1 ;}

/* 36  */    for (n = 140; n<=143; n++)         {Farbarray[n][0] = 252 ; Farbarray[n][1] = 122 ; Farbarray[n][2] = 1 ;}

             for (n = 144; n<=147; n++)         {Farbarray[n][0] = 252 ; Farbarray[n][1] = 146 ; Farbarray[n][2] = 1 ;}

/* 38  */    for (n = 148; n<=151; n++)         {Farbarray[n][0] = 253 ; Farbarray[n][1] = 160 ; Farbarray[n][2] = 0 ;}

             for (n = 152; n<=155; n++)         {Farbarray[n][0] = 253 ; Farbarray[n][1] = 177 ; Farbarray[n][2] = 0 ;}

/* 40  */    for (n = 156; n<=159; n++)         {Farbarray[n][0] = 255 ; Farbarray[n][1] = 186 ; Farbarray[n][2] = 26 ;}

             for (n = 160; n<=163; n++)         {Farbarray[n][0] = 255 ; Farbarray[n][1] = 194 ; Farbarray[n][2] = 53 ;}

/* 42  */    for (n = 164; n<=167; n++)         {Farbarray[n][0] = 254 ; Farbarray[n][1] = 207 ; Farbarray[n][2] = 40 ;}

             for (n = 168; n<=171; n++)         {Farbarray[n][0] = 254 ; Farbarray[n][1] = 220 ; Farbarray[n][2] = 27 ;}

/* 44  */    for (n = 172; n<=175; n++)         {Farbarray[n][0] = 254 ; Farbarray[n][1] = 234 ; Farbarray[n][2] = 40 ;}

             for (n = 176; n<=179; n++)         {Farbarray[n][0] = 254 ; Farbarray[n][1] = 248 ; Farbarray[n][2] = 53 ;}

/* 46  */    for (n = 180; n<=183; n++)         {Farbarray[n][0] = 254 ; Farbarray[n][1] = 248 ; Farbarray[n][2] = 43 ;}

             for (n = 184; n<=187; n++)         {Farbarray[n][0] = 252 ; Farbarray[n][1] = 248 ; Farbarray[n][2] = 14 ;}

/* 48  */    for (n = 188; n<=191; n++)         {Farbarray[n][0] = 240 ; Farbarray[n][1] = 249 ; Farbarray[n][2] = 50 ;}

             for (n = 192; n<=195; n++)         {Farbarray[n][0] = 235 ; Farbarray[n][1] = 249 ; Farbarray[n][2] = 50 ;}

/* 50  */    for (n = 196; n<=199; n++)         {Farbarray[n][0] = 230 ; Farbarray[n][1] = 249 ; Farbarray[n][2] = 50 ;}

             for (n = 200; n<=203; n++)         {Farbarray[n][0] = 225 ; Farbarray[n][1] = 249 ; Farbarray[n][2] = 60 ;}

/* 52  */    for (n = 204; n<=207; n++)         {Farbarray[n][0] = 220 ; Farbarray[n][1] = 249 ; Farbarray[n][2] = 70 ;}

             for (n = 208; n<=211; n++)         {Farbarray[n][0] = 215 ; Farbarray[n][1] = 245 ; Farbarray[n][2] = 70 ;}

/* 54  */    for (n = 212; n<=215; n++)         {Farbarray[n][0] = 210 ; Farbarray[n][1] = 245 ; Farbarray[n][2] = 80 ;}

             for (n = 216; n<=219; n++)         {Farbarray[n][0] = 210 ; Farbarray[n][1] = 251 ; Farbarray[n][2] = 89 ;}

/* 56  */    for (n = 220; n<=223; n++)         {Farbarray[n][0] = 222 ; Farbarray[n][1] = 252 ; Farbarray[n][2] = 105 ;}

             for (n = 224; n<=227; n++)         {Farbarray[n][0] = 226 ; Farbarray[n][1] = 253 ; Farbarray[n][2] = 121 ;}

/* 58  */    for (n = 228; n<=231; n++)         {Farbarray[n][0] = 230 ; Farbarray[n][1] = 253 ; Farbarray[n][2] = 138 ;}

             for (n = 232; n<=235; n++)         {Farbarray[n][0] = 233 ; Farbarray[n][1] = 253 ; Farbarray[n][2] = 151 ;}

/* 60  */    for (n = 236; n<=239; n++)         {Farbarray[n][0] = 236 ; Farbarray[n][1] = 253 ; Farbarray[n][2] = 170 ;}

             for (n = 240; n<=243; n++)         {Farbarray[n][0] = 241 ; Farbarray[n][1] = 254 ; Farbarray[n][2] = 214 ;}

/* 62  */    for (n = 244; n<=247; n++)         {Farbarray[n][0] = 245 ; Farbarray[n][1] = 254 ; Farbarray[n][2] = 214 ;}

             for (n = 248; n<=251; n++)         {Farbarray[n][0] = 247 ; Farbarray[n][1] = 254 ; Farbarray[n][2] = 222 ;} 

/* 64  */    for (n = 252; n<=255; n++)         {Farbarray[n][0] = 255 ; Farbarray[n][1] = 0 ; Farbarray[n][2] = 255 ;} 

         

   

 }

 

 

 

 

Download
Benutzeroberfläche Wachstum 1
Diese Datei muss sich im selben Verzeichnis wie der Programmcode befinden.
Oberflaeche_1.jpg
JPG Bild 21.2 KB