Ihre Aufgabe ist es, diese zu animieren Kreis Illusion . Es sieht so aus, als würden sich die Punkte innerhalb des Kreises drehen, aber sie bewegen sich tatsächlich nur in geraden Linien.
Kriterien
- Das Ergebnis muss animiert werden. Die Art und Weise, wie Sie die Animation ausführen, ist irrelevant. Sie kann eine erzeugen
.gif
, in ein Fenster zeichnen, einen Gerätebildschirm oder was auch immer. - Dies ist ein Beliebtheitswettbewerb, daher möchten Sie Ihrem Programm möglicherweise einige zusätzliche Funktionen hinzufügen, um mehr Upvotes zu erhalten, z. B. die Anzahl der Punkte zu variieren.
- Der Gewinner ist die am besten bewertete gültige Antwort 7 Tage nach der letzten gültigen Einreichung.
- Die Antworten, bei denen Punkte auf geraden Linien und nicht anders herum umgesetzt werden, sind willkommener
Antworten:
Python 3.4
Verwendung des Turtle-Moduls. Die Schildkröten haben unterschiedliche Farben und sind immer in die gleiche Richtung ausgerichtet. Sie können also leicht erkennen, dass sie sich entlang gerader Linien bewegen, indem Sie sich nur auf eine von ihnen konzentrieren. Trotzdem ist die Kreisillusion immer noch stark.
Die Illusion scheint auch mit nur 3 oder 4 Schildkröten noch ziemlich stark zu sein:
Die Framerate wird für alle diese GIF-Beispiele erheblich reduziert, scheint aber die Illusion nicht zu beeinträchtigen. Das lokale Ausführen des Codes sorgt für eine flüssigere Animation.
Im Gegensatz dazu sind hier einige, die sich wirklich drehen:
... oder doch?
Der Code kann mit 5 optionalen Argumenten ausgeführt werden: Auffüllung, Auflösung, Schleifen, Flip und Linien.
population
ist die Anzahl der Schildkrötenresolution
ist die zeitliche Auflösung (Anzahl der Animationsbilder pro Wiederholung)loops
legt fest, wie oft die Schildkröten auf sich selbst zurückkehren. Der Standardwert 1 gibt einen Standardkreis an, andere ungerade Zahlen geben die Anzahl der Schleifen in der Schildkrötenkette an, während gerade Zahlen eine Kette von Schildkröten ergeben, die an den Enden getrennt sind, aber immer noch die Illusion einer gekrümmten Bewegung zeigen.flip
Wenn der Wert nicht Null ist, kehren die Schildkröten für ihre Rückfahrt um (wie von aslum vorgeschlagen, damit sie sich niemals rückwärts bewegen). Standardmäßig behalten sie eine feste Richtung bei, um die visuelle Ablenkung an den Endpunkten zu vermeiden.lines
Wenn nicht Null, werden die Linien angezeigt, auf denen sich die Schildkröten bewegen, um die Übereinstimmung mit dem Beispielbild in der Frage zu gewährleisten.Beispiele mit
flip
Satz, mit und ohnelines
. Ich habe mein Hauptbeispiel oben ohne Flip gelassen, da ich es vorziehen würde, nicht sporadisch zu springen, aber der Rand des Kreises sieht bei allen ausgerichteten Schildkröten gleichmäßiger aus, sodass die Leute wählen können, welchen Stil sie beim Laufen bevorzugen der Code.Es ist möglicherweise nicht sofort ersichtlich, wie die obigen Bilder alle mit demselben Code erstellt wurden. Insbesondere das Bild weiter oben, das eine langsame äußere und eine schnelle innere Schleife aufweist (die wie eine Niere aussieht, die jemand versehentlich fallen gelassen hat). Ich habe die Erklärung dieser unten versteckt, falls jemand das später herausfinden möchte, während er experimentiert / nachdenkt.
Als ich verschiedene Zahlen ausprobierte, fand ich einige dieser Verzerrungen interessanter als die symmetrischeren Originale, deshalb wollte ich hier eine einfügen ...
quelle
C
Ergebnis:
quelle
system("cls"); // xD
SVG (kein Javascript)
JSFiddle Link hier
quelle
http://jsfiddle.net/z6vhD/13/
intervaltime
ändert die FPS (FPS = 1000 / Intervallzeit).balls
ändert die # Bälle.maxstep
Passt die # -Schritte in einem Zyklus an, je größer die Glättung ist. 64 sollte groß genug sein, wo es glatt erscheint.Modelliert als Kreis, der sich bewegt, anstatt die Kugeln entlang der Linien zu bewegen, aber der visuelle Effekt sollte der gleiche sein. Ein Teil des Codes ist ziemlich ausführlich, aber das ist kein Code-Golf, also ...
quelle
requestAnimationFrame
sondern nehmen Sie stattdessen . Modifizierte JSFiddle mitrequestAnimationFrame
.CSS-Animationen
Eine Lösung, die nur CSS-Animationen verwendet (siehe Animation in JSFiddle - Beachten Sie, dass ich die browserspezifischen Präfixe in die Geige eingefügt habe, damit sie in den neuesten Versionen funktionieren können).
quelle
-webkit-
für Webkit-basierte und-moz-
für Mozilla-basierte) Hier ist die gleiche Geige mit aktualisierten Präfixen: jsfiddle.net/nBCxz/3Mathematica
Hier ist eine ziemlich direkte Einreichung.
Wenn Sie anrufen, erhalten
animateCircle[32]
Sie eine übersichtliche Animation mit 32 Linien und Kreisen.In Mathematica ist das völlig reibungslos, aber ich musste die Anzahl der Frames für das GIF etwas begrenzen.
Was passiert nun, wenn Sie zwei Discs in jede Zeile einlegen? (Das heißt,
Disk[-Sin[t + phase]*line, 0.05]
zur Liste in der Liste hinzufügenMap
.)Sie können sie auch um 90 ° phasenverschoben (
Cos
statt verwenden-Sin
):quelle
{t, 0, 2 \[Pi]}
um{t, 0, 2 \[Pi] - 2 \[Pi]/60, 2 \[Pi]/60}
so , dass es nicht zwei identische Rahmen und ändernAnimate
zuTable
. Dann können Sie GIF exportieren.Animate
). Ich werde es aber nochTable
einmal versuchen .VBScript + VBA + Excel-Kreisdiagramm
Dadurch wird Ihr Prozessor ein wenig weinen, aber es sieht hübsch aus und ich glaube, es funktioniert nach Spezifikation. Ich habe die Antwort von @ Fabricio als Leitfaden für die Implementierung des Kreisbewegungsalgorithmus verwendet.
BEARBEITEN: Einige Anpassungen vorgenommen, um die Rendergeschwindigkeit zu verbessern.
Der Code:
quelle
Excel 161 Byte
A2 (Punkt) bestimmt die Zeit (Sekunden) für eine volle "Umdrehung".
Jede Zelle innerhalb der Zeilen ist eine Grundbedingung in Bezug auf den Wert der entsprechenden Zeile. Zum Beispiel ist K2:
Und die mittlere Zelle (K9) ist:
Erzwingt die Animation, indem 'delete' in einer zufälligen Zelle gedrückt gehalten wird, um ständig eine Aktualisierung auszulösen.
Ich weiß, dass dies ein altes Thema ist, aber die jüngsten Aktivitäten haben es an die Spitze gebracht und es schien aus irgendeinem Grund ansprechend. Langzeit-PCG-Listener, erster Anrufer. Sei sanft.
quelle
Nur zum Spaß mit PSTricks.
quelle
Fortran
Jeder Frame wird mithilfe des Fortran-Gif-Moduls als individuelle Gif-Datei erstellt: http://fortranwiki.org/fortran/show/writegif.
Dann betrüge ich ein wenig mit ImageMagick, um die einzelnen Gifs zu einem animierten Gif zusammenzuführen.
UPDATE: Setze new = .true. um folgendes zu bekommen:
quelle
Verpflichtend C64- Version.
Kopieren und Einfügen in Ihren Lieblingsemulator:
quelle
Eine kompakte Javascript-Version, bei der die Standardeinstellungen auf etwas anderes geändert werden
http://jsfiddle.net/yZ3DP/1/
HTML:
JavaScript:
quelle
bw=10
) nett aus . Bitte bearbeiten Sie Ihre Antwort, um Ihren Code anzuzeigen. Oh, und während Sie gerade dabei sind, gibt es einen Fehler , den Sie sollten beheben: ersetzentime+i*0.39*0.29
mittime+i*Math.PI/num
in den trigonometrischen Berechnungen , so dass die Koordinaten richtig für jeden Wert von berechnet werdennum
. (PS Aktualisiert JSFiddle hier Und willkommen in codegolf.stackexchange.com.)Meine Einstellung zu Elm . Ich bin ein absoluter Anfänger, der gerne PRs akzeptiert, um diese Lösung zu verbessern ( GitHub ):
Beachten Sie, dass diese Übermittlung wirklich Punkte auf geraden Linien verschiebt:
quelle
Second Life LSL
Beginn des Schildkröten-Alpha-Bildes (Rechtsklick zum Speichern des Bildes)
Ende des Schildkröten-Alpha-Bildes (Rechtsklick zum Speichern des Bildes)
Erstellen des Objekts:
Erstellen Sie einen Root-Prim-Zylinder der Größe <1, 1, 0,01> in 0,49, 0,51, Farbe < 0, 0, 0>
machen die Beschreibung dieses Zylinders "8,1,1,1" ohne die Anführungszeichen (sehr wichtig)
machen einen Zylinder, nennen es "Zyl", Farbe <0,25, 0,25, 0,25> Alpha 0,5
duplizieren die Mache 48 Mal
eine Schachtel, nenne sie "Kugel", färbe <1, 1, 1> Transparenz 100 mit Ausnahme der oberen Transparenz 0
Lege deine Schildkrötentextur auf Gesicht 0 der Schachtel, Schildkröte sollte Gesicht + x sein und
die Schachtel 48 Mal duplizieren
wähle alle Kästchen und Zylinder aus, stelle sicher, dass der Wurzelzylinder zuletzt ausgewählt ist,Verbindung (Kontrolle L)
Setze diese 2 Skripte in den Root:
quelle