File:Moiré Uhr Sekundenzeiger.gif

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search

Moiré_Uhr_Sekundenzeiger.gif (500 × 500 pixels, file size: 2.55 MB, MIME type: image/gif, looped, 1,210 frames, 2 min 1 s)

Note: Due to technical limitations, thumbnails of high resolution GIF images such as this one will not be animated. The limit on Wikimedia Commons is width × height × number of frames ≤ 100 million.

Captions

Captions

Add a one-line explanation of what this file represents

Summary

[edit]
Description
Deutsch: Moiré Uhr: Imitation der Minuten- und der Sekundenanzeige mit je einem rotierenden Moiré-Muster. Die Minutenanzeige wird mit einer von der Stundenachse angetriebenen Scheibe (12 Löcher über 11 weissen Marken auf dem Zifferblatt) erzeugt. Für die Sekundenanzeige (nur symbolisch) dreht sich die mit der Minutenachse angetriebene obere Scheibe (65 Löcher über 64 weissen Marken auf der bereits drehenden Scheibe darunter).
Source idea: Dr-Ing. S.Wetzel (Uhr, Schiebelehre und eine Nonius-Uhr); animation: Benedikt.Seidl
Author Benedikt.Seidl
Other versions File:Moiré_Uhr.gif

Licensing

[edit]
I, the copyright holder of this work, hereby publish it under the following licenses:
GNU head Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled GNU Free Documentation License.
w:en:Creative Commons
attribution share alike
This file is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported, 2.5 Generic, 2.0 Generic and 1.0 Generic license.
You are free:
  • to share – to copy, distribute and transmit the work
  • to remix – to adapt the work
Under the following conditions:
  • attribution – You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
  • share alike – If you remix, transform, or build upon the material, you must distribute your contributions under the same or compatible license as the original.
You may select the license of your choice.

Quellcode

[edit]

die einzelbilder des gifs wurde mit einem processing 1.0.1 skript generiert, und anschließend mit gifsicle zu einer animation zusammengefügt. der befehl für gifsicle wird am ende des programms ausgegeben. davor müssen die ausgegeben png bilder in gifs umgewandelt werden.

int []oldpixels;
int []expixels;
int c=0;
PGraphics pg;
float  j;
float k=0;
String s;
int o =0;

void setup()
{
  size(500, 500);
  noStroke();
  smooth();
  strokeCap(SQUARE);
  frameRate(10); //as fast as it can
  oldpixels = new int[width*height];
  expixels = new int[width*height];
  pg = createGraphics(width, height, JAVA2D);
}

void draw()
{
  // zuerst hintergrund ganz ganz helle farbe machen (wird dann durchsichtig gemacht)
  background(255,255,254);

  //eine weißen kreis zeichnen (äußerster rand von der ganzen grafik)
  fill(255);
  stroke(0);
  strokeWeight(width/250.0);
  ellipse(width*0.5, height*0.5, height*0.95,width*0.95);

  //einen schwarzen kreis zeichnen (innere vom ziffernblatt)
  noStroke();
  fill(0,0,0);
  ellipse(width*0.5, height*0.5, height*0.9,width*0.9);

  //einen grauen kreis zeichnen (dass man erkennt, dass sich der sekunden zeiger was eigenes ist)
  //noStroke();
  //fill(40);
  //ellipse(width*0.5, height*0.5, height*0.5,width*0.5);
  fill(255);

  //die strichchen für die stunden zeichnen (der weiße rand vom ziffernplatt wird noch mal unterteilt)
  stroke(0,0,0); // 0;
  strokeWeight(height/100.0);
  for(float i=1; i<=12 ; i++)
  {
    line(width*0.5 + width*0.951*0.5*cos(TWO_PI * i/12.0), width*0.5 + width*0.951*0.5*sin(TWO_PI * i/12.0), width*0.5 + width*0.89*0.5*cos(TWO_PI * i/12.0), width*0.5 + width*0.89*0.5*sin(TWO_PI * i/12.0));
  }

  noStroke();


  if (o<=0)
  {
  
    //kleinen punkte zeichnen (hier werden 12 kleine weiße punkte gezeichent) für die minuten!
    for(float i=1; i<=12 ; i++)
    {
      ellipse(width*0.5 + ( 0.35 * width * cos(-PI*0.5 + j + (TWO_PI * i/12.0))), height*0.5 + (0.35 * height * sin(-PI*0.5 + j + (TWO_PI * i/12.0))), width/50.0, height/50.0);
    }

    // für die sekunden: kleinen punkte zeichnen (hier werden 60 kleine weiße punkte gezeichent)
    for(float i=1; i<=60 ; i++)
    {
      ellipse(width*0.5 + ( 0.5*0.5 * width * cos(-PI*0.5 +  k + (TWO_PI * i/60.0))), height * 0.5 + (0.5* 0.5 * height * sin(-PI*0.5 + k + (TWO_PI * i/60.0))), width/100.0, height/100.0);
    }

    // jetzt wieder teile davon verdecken
    // jetzt wird über die kleinen weißen punkte von einem schwarzer kreis verdekct,
    // dieser hat aber genau 11 lücken und verdeckt damit immer 
    // einige der kleinen kreise
    stroke(0,0,0);
    strokeWeight(height/20.0);
    noFill();

    // minuten stehen fest!
    for(float i=1; i<=11 ; i++)
    {
      arc(width*0.5, height*0.5, width*0.7, height*0.7, i/11.0 * TWO_PI - PI/2 + atan(2*width/50.0 / (width*0.7) ),  (i+1.0)/11.0 * TWO_PI - PI/2 - atan(2*width/50.0 / (width*0.7) ));
    }

    // jetzt das ganze noch für die sekunden // die mnüssen aber mit dem grau verdekct werden
    stroke(0);
    for(float i=1; i<=59 ; i++)
    {
      arc(width*0.5, height*0.5, width*0.5, height*0.5, (i/59.0) * TWO_PI - PI/2 + 0.01 ,  (i+1.0)/59.0 * TWO_PI - PI/2 - 0.01);
    }


    noFill();
    //stunden punkt zeichnen (der große weiße kreis)
    stroke(255); strokeWeight(width/200.0);
    ellipse(width*0.5 + (0.35 * width * cos(j-PI/2)), height*0.5 + (0.35 * height * sin(j-PI/2)), width/10, width/10);
    noStroke();
    fill(255);


    //debugg sachen
    if (0==1)
    {
      // zum debuggen 60 striche für die miuten
      stroke(128,255,0);
      strokeWeight(height/100.0);
      for(float i=1; i<=60 ; i++)
        line(width*0.5 + width*0.5*cos(TWO_PI * i/60.0), width*0.5 + width*0.5*sin(TWO_PI * i/60.0), width*0.5 + width*0.95*0.5*cos(TWO_PI * i/60.0), width*0.5 + width*0.95*0.5*sin(TWO_PI * i/60.0));
      // zum debuggen sekunden,minuten und stunden zeiger
      stroke(255,0,0);
      line(width*0.5, height*0.5, width*0.5+0.5*width * cos((-PI * 0.5) + k),  height*0.5+0.5 * height * sin((-PI * 0.5) + k));
      stroke(0,255,0);
      line(width*0.5, height*0.5, width*0.5+0.5*width * cos((-PI * 0.5) + k*60),  height*0.5+0.5 * height * sin((-PI * 0.5) + k*60));
      stroke(0,0,255);
      line(width*0.5, height*0.5, width*0.5+0.5*width * cos((-PI * 0.5) + j),  height*0.5+0.5 * height * sin((-PI * 0.5) + j));
    }
  }

  if (0==0)
  {
    //jetzt ist das bild so weit fertig, jetzt laden wir es in den speicher
    loadPixels();

    //jetzt schauen wir uns jeden pixel des bildes an, und vergleichen es mit dem pixel des vorherigen bildes
    for(int i=0; i < pixels.length; i++)
    {
      //wenn der pixel des vorherigen bildes gleich dem pixel des jetzigen bildes ist, macht er diesen punkt transparent bzw. wenn es nicht
      // das erste bild ist wenn der pixel die farbe 0,0,3 hat, wird er auch transparent siehe ganz am anfang mit dem background
      if (((pixels[i] == oldpixels[i])&&(c != 0))||(pixels[i]==color(255,255,254)))
        expixels[i] = color(0,0,0,0);
      //wenn es nicht transparent ist, macht er es in der farbe, in der das aktuelle bild ist.
      else
        expixels[i] = pixels[i];
    }
    c ++;

    //jetzt wird das bild, das gerade errechnet wurde gespeichert
    arrayCopy(pixels,oldpixels);
    pg.beginDraw();
    pg.loadPixels();
    arrayCopy(expixels, pg.pixels);
    pg.updatePixels();
    pg.save("sekunden_neu/"+c+".png");
    pg.endDraw();
  }

  //hier tickt die zeit
  if(j <= (TWO_PI/12.0))
  {
    k = k + TWO_PI/(60*60/3.0);
    j = j + TWO_PI/(12*60*60/3.0);
    //float sec = round(j*12*60*60 / TWO_PI);
    //int tsec = int(sec) % 60;
    //int tmin = int(sec/60) % 60;
    //int th = int(sec/60/60);
    // println(th + ":" + tmin + ":" + tsec + " " + k);
  }
  //     j = j + PI/float(10000);
  else if (o<=10)
  {
    o ++;
  }
  else
  {
    println("der erste teil der animation ist geschafft. jetzt die pngs in gif umwandeln und dann folgenden befehl ausführen:");
    println(""); //leerzeile
    s = "";
    for (int i = 1; i<=10+(12*60*60/3.0)/12.0;i++)
      s = s + " "+i+".gif";
    print("gifsicle -l  -d 10 -D asis "+s+" >_animation.gif");
    noLoop(); // hier endet das programm
  }


}

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current18:54, 19 February 2009Thumbnail for version as of 18:54, 19 February 2009500 × 500 (2.55 MB)Benedikt.Seidl (talk | contribs)neues layout, etwas schneller
16:15, 12 February 2009Thumbnail for version as of 16:15, 12 February 2009500 × 500 (3.12 MB)Benedikt.Seidl (talk | contribs)schwarze balken, hinweis vor wiederholung der schleife
08:33, 7 February 2009Thumbnail for version as of 08:33, 7 February 2009500 × 500 (1.32 MB)Benedikt.Seidl (talk | contribs)flüssigere Animation, nur eine Stunde
20:45, 4 February 2009Thumbnail for version as of 20:45, 4 February 2009500 × 500 (2.1 MB)Benedikt.Seidl (talk | contribs)== Beschreibung == {{Information |Description={{de|1=Moiré Uhr}} |Source= idea: Analemma; animation: Benedikt.Seidl |Author=Benedikt.Seidl |Date=2009-01-05 |Permission= |other_versions=[[:

The following page uses this file:

File usage on other wikis

The following other wikis use this file: