File:Moiré Uhr Sekundenzeiger.gif
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
Summary
[edit]DescriptionMoiré Uhr Sekundenzeiger.gif |
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]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.http://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue |
- 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.
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/Time | Thumbnail | Dimensions | User | Comment | |
---|---|---|---|---|---|
current | 18:54, 19 February 2009 | 500 × 500 (2.55 MB) | Benedikt.Seidl (talk | contribs) | neues layout, etwas schneller | |
16:15, 12 February 2009 | 500 × 500 (3.12 MB) | Benedikt.Seidl (talk | contribs) | schwarze balken, hinweis vor wiederholung der schleife | ||
08:33, 7 February 2009 | 500 × 500 (1.32 MB) | Benedikt.Seidl (talk | contribs) | flüssigere Animation, nur eine Stunde | ||
20:45, 4 February 2009 | 500 × 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=[[: |
You cannot overwrite this file.
File usage on Commons
The following page uses this file:
File usage on other wikis
The following other wikis use this file:
- Usage on de.wikipedia.org