Datei:Moiré Uhr.gif
Moiré_Uhr.gif (500 × 500 Pixel, Dateigröße: 1,22 MB, MIME-Typ: image/gif, Endlosschleife, 1.000 Bilder)
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.
Beschreibung
BeschreibungMoiré Uhr.gif |
Deutsch: Moiré Uhr English: clock with Moiré effect Polski: Zegar z efektem Moiré |
|||
Datum | ||||
Quelle | Eigenes Werk | |||
Urheber | Idea: Dr.Ing.S.Wetzel (Uhr, Schiebelehre und eine Nonius-Uhr); Programmer:Benedikt.Seidl | |||
Andere Versionen |
|
Quellcode
Die Einzelbilder des Gifs wurde mit einem Processing-1.0.1-Programm 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 aber noch die ausgegebenen PNG-Bilder in Gifs umgewandelt werden.
int []oldpixels;
int []expixels;
int arg1=0;
PGraphics pg;
float j;
String s;
void setup()
{
size(500, 500);// P2D);
noStroke();
smooth();
strokeCap(SQUARE);
frameRate(10000); //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);
//einen 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 (inneres vom zifferblatt)
noStroke();
fill(0);
ellipse(width*0.5, height*0.5, height*0.9,width*0.9);
fill(255);
//die strichchen für die stunden zeichnen (der weiße rand vom zifferblatt wird noch einmal unterteilt)
stroke(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();
//stunden-punkt zeichnen (der große weiße kreis)
ellipse(width*0.5 + (0.3 * width * cos(j-PI/2)), height*0.5 + (0.3 * height * sin(j-PI/2)), width/20, width/20);
//kleinen punkte zeichnen (hier werden 12 kleine weiße punkte gezeichnet)
for(float i=1; i<=12 ; i++)
{
ellipse(width*0.5 + ( 0.4 * width * cos(PI/2 + j + (TWO_PI * i/12.0))), height*0.5 + (0.4 * height * sin(PI/2 + j + (TWO_PI * i/12.0))), width/50.0, height/50.0);
}
// jetzt wieder teile davon verdecken
// jetzt wird über die kleinen weißen punkte ein schwarzer kreis gelegt, dieser hat aber genau 11 lücken und verdeckt damit immer
// einige der kleinen kreise
stroke(0,0,0);
strokeWeight(height/20.0);
noFill();
for(float i=1; i<=11 ; i++)
{
arc(width*0.5, height*0.5, width*0.8, height*0.8, i/11.0 * TWO_PI - PI/2 + atan(2*width/50.0 / (width*0.8) ), (i+1.0)/11.0 * TWO_PI - PI/2 - atan(2*width/50.0 / (width*0.8) ));
}
//jetzt ist das bild so weit fertig, jetzt laden wir es in den speicher
loadPixels();
//jetzt schauen wir uns jedes pixel des bildes an, und vergleichen es mit dem pixel des vorherigen bildes
for(int i=0; i < pixels.length; i++)
{
//wenn das pixel des vorherigen bildes gleich dem pixel des jetzigen bildes ist, macht es diesen punkt transparent bzw. wenn es nicht
// das erste bild ist, wenn das pixel die farbe 0,0,3 hat, wird es auch transparent siehe ganz am anfang mit dem background
if (((pixels[i] == oldpixels[i])&&(arg1 != 0))||(pixels[i]==color(255,255,254)))
expixels[i] = color(0,0,0,0);
//wenn es nicht transparent ist, macht es es in der farbe, in der das aktuelle bild ist.
else
expixels[i] = pixels[i];
}
arg1 ++;
//jetzt wird das bild, das gerade errechnet wurde, gespeichert
arrayCopy(pixels,oldpixels);
pg.beginDraw();
pg.loadPixels();
arrayCopy(expixels, pg.pixels);
pg.updatePixels();
pg.save(""+arg1+".png");
pg.endDraw();
//hier tickt die zeit
if(j <= TWO_PI)
j = j + PI/500;
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<=1000;i++)
s = s + " "+i+".gif";
print("gifsicle -l -d 0 -D asis "+s+" >animation.gif");
noLoop(); // hier endet das programm
}
}
Lizenz
Public domainPublic domainfalsefalse |
Ich, der Urheberrechtsinhaber dieses Werkes, veröffentliche es als gemeinfrei. Dies gilt weltweit. In manchen Staaten könnte dies rechtlich nicht möglich sein. Sofern dies der Fall ist: Ich gewähre jedem das bedingungslose Recht, dieses Werk für jedweden Zweck zu nutzen, es sei denn, Bedingungen sind gesetzlich erforderlich. |
In dieser Datei abgebildete Objekte
Motiv
9. Januar 2008
image/gif
Dateiversionen
Klicke auf einen Zeitpunkt, um diese Version zu laden.
Version vom | Vorschaubild | Maße | Benutzer | Kommentar | |
---|---|---|---|---|---|
aktuell | 07:51, 9. Jan. 2009 | 500 × 500 (1,22 MB) | wikimediacommons>Benedikt.Seidl | {{Information |Description={{de|1=Moiré Uhr}} |Source=Eigenes Werk (own work) |Author=Benedikt.Seidl |Date=2008-01-09 |Permission= |other_versions= }} <!--{{ImageUpload|full}}--> Category:Moiré |
Dateiverwendung
Die folgenden 2 Seiten verwenden diese Datei: