Zur Beschreibungsseite auf Commons

Datei:Moiré Uhr Sekundenzeiger.gif

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Moiré_Uhr_Sekundenzeiger.gif(500 × 500 Pixel, Dateigröße: 2,55 MB, MIME-Typ: image/gif, Endlosschleife, 1.210 Bilder, 2 min 1 s)

Hinweis: Aufgrund technischer Beschränkungen werden Vorschaubilder hochauflösender GIF-Dateien wie dieser nicht animiert.

Diese Datei und die Informationen unter dem roten Trennstrich werden aus dem zentralen Medienarchiv Wikimedia Commons eingebunden.

Zur Beschreibungsseite auf Commons


Beschreibung

Beschreibung
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).
Quelle idea: Dr-Ing. S.Wetzel (Uhr, Schiebelehre und eine Nonius-Uhr); animation: Benedikt.Seidl
Urheber Benedikt.Seidl
Andere Versionen File:Moiré_Uhr.gif

Lizenz

Ich, der Urheberrechtsinhaber dieses Werkes, veröffentliche es hiermit unter der folgenden Lizenz:
GNU head Es ist erlaubt, die Datei unter den Bedingungen der GNU-Lizenz für freie Dokumentation, Version 1.2 oder einer späteren Version, veröffentlicht von der Free Software Foundation, zu kopieren, zu verbreiten und/oder zu modifizieren; es gibt keine unveränderlichen Abschnitte, keinen vorderen und keinen hinteren Umschlagtext.

Der vollständige Text der Lizenz ist im Kapitel GNU-Lizenz für freie Dokumentation verfügbar.

w:de:Creative Commons
Namensnennung Weitergabe unter gleichen Bedingungen
Diese Datei ist unter den Creative-Commons-Lizenzen „Namensnennung – Weitergabe unter gleichen Bedingungen 3.0 nicht portiert“, „2.5 generisch“, „2.0 generisch“ und „1.0 generisch“ lizenziert.
Dieses Werk darf von dir
  • verbreitet werden – vervielfältigt, verbreitet und öffentlich zugänglich gemacht werden
  • neu zusammengestellt werden – abgewandelt und bearbeitet werden
Zu den folgenden Bedingungen:
  • Namensnennung – Du musst angemessene Urheber- und Rechteangaben machen, einen Link zur Lizenz beifügen und angeben, ob Änderungen vorgenommen wurden. Diese Angaben dürfen in jeder angemessenen Art und Weise gemacht werden, allerdings nicht so, dass der Eindruck entsteht, der Lizenzgeber unterstütze gerade dich oder deine Nutzung besonders.
  • Weitergabe unter gleichen Bedingungen – Wenn du das Material wiedermischst, transformierst oder darauf aufbaust, musst du deine Beiträge unter der gleichen oder einer kompatiblen Lizenz wie das Original verbreiten.
Du darfst es unter einer der obigen Lizenzen deiner Wahl verwenden.

Quellcode

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
  }


}

Kurzbeschreibungen

Ergänze eine einzeilige Erklärung, was diese Datei darstellt.

In dieser Datei abgebildete Objekte

Motiv

image/gif

Dateiversionen

Klicke auf einen Zeitpunkt, um diese Version zu laden.

Version vomVorschaubildMaßeBenutzerKommentar
aktuell20:54, 19. Feb. 2009Vorschaubild der Version vom 20:54, 19. Feb. 2009500 × 500 (2,55 MB)Benedikt.Seidlneues layout, etwas schneller
18:15, 12. Feb. 2009Vorschaubild der Version vom 18:15, 12. Feb. 2009500 × 500 (3,12 MB)Benedikt.Seidlschwarze balken, hinweis vor wiederholung der schleife
10:33, 7. Feb. 2009Vorschaubild der Version vom 10:33, 7. Feb. 2009500 × 500 (1,32 MB)Benedikt.Seidlflüssigere Animation, nur eine Stunde
22:45, 4. Feb. 2009Vorschaubild der Version vom 22:45, 4. Feb. 2009500 × 500 (2,1 MB)Benedikt.Seidl== Beschreibung == {{Information |Description={{de|1=Moiré Uhr}} |Source= idea: Analemma; animation: Benedikt.Seidl |Author=Benedikt.Seidl |Date=2009-01-05 |Permission= |other_versions=[[: