Ein einzelnes Pixel, das sich auf einer Kreisbahn bewegt


45

Dies ist eine grafische Ausgabe-Herausforderung, bei der es darum geht, den kürzesten Code pro Sprache anzugeben.

Aufgabe

Ihr Code sollte ein einzelnes lila Pixel (Hex-Wert 800080 oder RGB (128, 0, 128)) darstellen und sich im Uhrzeigersinn um einen Kreis bewegen. Es sollte genau 60 Sekunden dauern, bis eine vollständige Umrundung des Kreises erfolgt ist, und sollte unbegrenzt fortgesetzt werden. Auf dem Bildschirm oder im Fenster sollte außer dem Pixel nichts anderes angezeigt werden. Die Breite des Kreises sollte 0,75 betragen (passend gerundet), die Breite des Bildschirms oder Fensters und der Hintergrund sollte weiß sein. Um dumme Lösungen zu vermeiden, sollte der Bildschirm oder das Fenster mindestens 100 Pixel breit sein.

Ihr Code sollte ein vollständiges Programm sein .

Sprachen und Bibliotheken

Sie können eine beliebige Sprache oder Bibliothek verwenden. Ich würde jedoch gerne in der Lage sein, Ihren Code nach Möglichkeit zu testen. Wenn Sie also klare Anweisungen zur Ausführung in Ubuntu geben können, wären Sie sehr dankbar.

Fehlende Top-20-Sprachen. Hilfe benötigt.

In den folgenden 20 Programmiersprachen fehlt derzeit eine Lösung.

  • C , C ++, C # , Python , PHP , Visual Basic .NET , Perl, Delphi / Object Pascal, Assemblierung , Objective-C , Swift, Pascal, Matlab / Octave , PL / SQL, OpenEdge ABL, R

Katalog

Das Stapel-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.

Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:

## Language Name, N bytes

Wo Nist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:

## Perl, 43 + 2 (-p flag) = 45 bytes

Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


1
Welcher Radius soll der Kreis sein?
Timothy Groote

19
Warum sollte das Pixel lila sein? Ich gehe davon aus, dass einige Sprachen wie TI-Basic keine Farbfunktionen haben, was bedeutet, dass sie aus einem ziemlich willkürlichen Grund nicht für die Herausforderung verwendet werden können
Fatalize 29.10.15

1
@Fatalize bedeutet nicht, dass Sie die Farbe nicht auf clevere kreative Weise in das Programm einfügen können, um Bytes zu sparen.
Timothy Groote

3
@TimothyGroote TI-BASIC hat hauptsächlich nur eine Farbe: Schwarz. Alles andere ist ein Off-Pixel. Es gibt C (SE) -Rechner mit Farben, aber nicht jeder hat eine.
Conor O'Brien

10
Ich bin sicher, dass ein lila Cellofane über Ihrem Bildschirm nicht zu Ihrer Codegröße in Bytes beiträgt. Ich meine, es hat vor dem Vectrex funktioniert;)
Timothy Groote

Antworten:


23

Verarbeitung , 101 97 96 Bytes

4 Bytes dank Flambino.

1 Byte dank Kritixi Lithos.

float d;void draw(){background(-1);stroke(#800080);d+=PI/1800;point(50+cos(d)*38,50+sin(d)*38);}

Dadurch wird ein Standardfenster von 100 x 100 Pixel mit der erforderlichen Animation erstellt.

Ausgabefenster

Haftungsausschluss: Dieses Bild ist kein GIF. Starren Sie es keine Minute an.


2
Implementiert dies die 60-Sekunden-Regel?

2
@ Lembik Ja. Die Standard-Framerate ist 60 fps und ich erhöhe die π/1800Winkelradiant gleichzeitig. (Es war vor π/360010 Sekunden wegen meines
Hirnfurzes

5
@ Pietu1998 Dass Brainfart aufgrund der Tatsache, dass Pi falsch ist
Cruncher

2
@ Cruncher muss vi hart lieben!
Tim

17
Hey, dein GIF funktioniert nicht, ich habe es eine Minute lang angestarrt, aber nichts ist passiert
Beta Decay

16

QB64, 79 Bytes

QB64 ist ein QBasic-Emulator, der einige nette Funktionen hinzufügt. Dieses Programm verwendet eine ( CLS,15), die von Vanilla QBasic nicht unterstützt wird.

SCREEN 7
DO
T=TIMER/9.55
PSET(COS(T)*75+99,SIN(T)*75+99),5
PLAY"c8"
CLS,15
LOOP

Das ist sehr laut. Mit dem PLAYBefehl wird die Ausführung für kurze Zeit angehalten, bevor der Bildschirm gelöscht wird. Andernfalls flackert das Pixel und wird unsichtbar.

Laden Sie QB64 herunter , laden Sie diese Datei, klicken Sie auf Runund dann auf Start.

Hier ist es in Aktion:

das Programm

Ich habe ein paar Tricks ( SCREEN 7anstelle von SCREEN 13und PSETanstelle von POKE) von @ DLoscs Antwort genommen, also ist die Anerkennung fällig. Wie in seiner Antwort, ist meine Magenta tatsächlich #8B008B, was vom OP als akzeptabel erachtet wurde.

(Die Konstante 9.55ist eine Annäherung an 30/π = 9.54929658551. Ist sie nah genug?)


Ha! Nie daran gedacht, PLAYfür eine Verzögerung zu verwenden. Ich hätte schwören können, dass es einen Code für eine Pause gibt, aber ich sehe ihn jetzt nicht in der Hilfedatei. Ich habe überlegt (eine Funktion von) TIMERals Parameter zu verwenden, habe es aber nie versucht, um festzustellen, ob es kürzer ist. Ein dickes Lob!
DLosc

4
Danken! Ich habe mich schamlos PSETvon dir gelöst, also ein dickes Lob zurück :) Es sieht so aus, als ob eine Pause n0länger ist als c. Ich mag es auch ein bisschen als Regelverbesserung: Das OP sagte, nichts anderes könne im Fenster angezeigt werden, aber niemals, dass mein Programm nicht laut losgehen könnte. BEEP BEEP BEEP .
Lynn

1
Ich habe nichts gegen die Pieptöne, aber ich kann nicht wirklich sehen, dass sich ein Pixel um einen Kreis bewegt, wenn ich es unter Linux versuche.

1
Hier ist es in Aktion auf meiner Maschine, was beweisen sollte.
Lynn

12
Ich starrte eine Weile auf das Bild, weil Sie sagten "hier ist es in Aktion ".
mbomb007

14

Java, 449 443 439 Bytes

Weil ich immer dumme Ideen hatte. Wie Golfen in Java;).

import java.awt.*;import javax.swing.*;class F extends JFrame{F()throws Exception{setContentPane(new P());setSize(400,400);setVisible(0<1);for(;;Thread.sleep(100))repaint();}class P extends JPanel{double c;public void paintComponent(Graphics g){g.setColor(new Color(8388736));c=(c-0.1)%60;double t=0.104*c;g.fillRect((int)(180+Math.sin(t)*120),(int)(180+Math.cos(t)*120),1,1);}}public static void main(String[]x)throws Exception{new F();}}

Edit: Danke für @Ypnypn für das Golfen 7 Bytes!

Edit2: Danke für @Franz D. für das Speichern von 3 Bytes!


7
Java gewinnt den längsten Wettbewerb für kürzesten Code bis jetzt :)

1
- Sie müssen die Mitgliedsvariablen nicht auf Null initialisieren, sodass Sie zwei Bytes (~ 0,45%) einsparen können, indem Sie "c = 0" in "c" konvertieren.
Franz D.

1
Und Sie können ein weiteres Byte speichern, indem Sie die Farbe in hexadezimaler Schreibweise (neue Farbe) (0x800080) initialisieren.
Franz D.

1
@FranzD. Noch besser - verwenden Sie einfach die Dezimalzahl 8388736.
Ypnypn

1
Befreien Sie sich von JFrame, verwenden Frame, können Sie javax Import entfernen.
Magic Octopus Urn

14

Mathematica, 102 101 94 Bytes

Animate[Graphics[{White,Disk[],{Purple,Point[{0,1}]}}~Rotate~-t],{t,0,2π},DefaultDuration->60]

Erstellt einen weißen Kreis, der ausgeblendet ist, und platziert einen Punkt, der der Kante von 0 bis 2π folgt. Mit der DefaultDurationOption von Mathematica kann ich festlegen, dass alle 60 Sekunden eine Schleife abgeschlossen wird.

Hier ist eine beschleunigte Version der Ausgabe:

BEARBEITEN: Wechseln Sie Circlezu Disk, um 2 Zeichen zu speichern, und fügen Sie ein negatives Vorzeichen hinzu t, um den Cursor im Uhrzeigersinn zu bewegen.

BEARBEITEN: 7 Bytes mit dem ~Operator gespeichert (danke an Mauris).


14
Ein weiterer Beweis dafür, dass Mathematica nur eine Programmiersprache ist, in der Sie einige vage englische Wörter schreiben, die bedeuten, was Sie wollen, und dann Interpunktion hinzufügen. (Ich höre, Sie können a~f~banstelle von verwenden f[a,b], würde das nicht Ihre Rotatekürzere machen?)
Lynn

1
Sie können auch die Präfixnotation für verwenden, Point@{0,1}und ich glaube nicht, dass Sie die Liste benötigen Purple,Point....
Martin Ender

1
@ Mauris. Für den ungeübten Betrachter kann Mathematica tatsächlich wie vage englische Wörter und Satzzeichen aussehen. In Wirklichkeit sind dies die Namen bestimmter, genau definierter Funktionen, Einstellungen und Operatoren. Die Wahrscheinlichkeit, dass ein Nicht-Programmierer funktionsfähigen Code auslagern kann, liegt bei null.
DavidC

3
@ David: Haha, natürlich bin ich mir bewusst - ich habe nur
Lynn

@ Mauris, du hast mich reingelegt!
DavidC

14

HTML, 235 290 295 354 347 Bytes

<a><style>*{position:absolute;margin:0;box-sizing:border-box}body{height:100vh;width:100vh}a{left:12.5%;top:50%;width:75%;height:1px;border-left:1px solid purple;animation:r 60s infinite linear}@keyframes r{100%{transform:rotate(360deg

Als .htmlDatei speichern und in einem Browser öffnen, der keine Herstellerpräfixe wie Chrome oder Firefox benötigt. Oder probieren Sie diese Geige .


Dies ist eine neue Version, die viel kürzer ist als mein erster Versuch, den ich 5 Minuten vor einem Meeting geschrieben hatte. Die neue Größe der Zeichenfläche ist ein Quadrat, das auf der Höhe des Ansichtsfensters basiert. Das funktioniert ganz gut und ist nicht auf eine bestimmte definierte Höhe beschränkt. Ich bin sehr genau über die Einstellungen in der Herausforderung (75% Größe der Eltern, lila und 1px). Daher muss und kann ich die folgenden Regeln nicht verwerfen oder vereinfachen:

* { margin: 0; box-sizing:border-box; }
a { left: 12.5%; }

Ungolfed

Dies ist die ungolfed Version mit sauberem Markup:

<!DOCTYPE html>
<html>

<head>
    <style>
        * {
            position: absolute;
        }

        body {
            margin: 0;
            height: 100vh;
            width: 100vh;
        }

        a {
            left: 12.5%;
            top: 50%;
            width: 75%;
            height: 1px;
            border-left: 1px solid purple;
            box-sizing: border-box;
            animation: r 60s infinite linear;
        }

        @keyframes r {
            100%{
                transform: rotate(360deg)
            }
        }
    </style>    
</head>
<body>
    <a></a>
</body>

Bearbeitungen

  • 7 Bytes hinzugefügt . Ich dachte, niemand würde bemerken, dass es eine Standardverzögerung bei der Animation gibt. ;) Ich habe es linearjetzt eingestellt.
  • Gespeichert 59 Bytes durch alles abbrechen zu werfen , dass der Browser automatisch behandelt.
  • 3 Bytes gespart durch Entfernen des Trailings )}}. Dank Zahnbürste .
  • Speichert 2 Bytes, indem verwendet wird, 12%stattdessen 12pxderselbe Wert, der der Größe des übergeordneten Elements entspricht.
  • Gespeichert 55 Bytes wegen der massiven Refactoring, auch viele Kommentare berücksichtigt. Vielen Dank für alle Beiträge.

1
Ich wollte nur den Beitrag kommentieren, ich würde gerne eine reine HTML / CSS-Lösung sehen (ty für das Einreichen einer)
Dwana

1
Bei Verwendung von Fiddle ist die Geschwindigkeit des sich bewegenden Pixels sehr ungleichmäßig. Es kommt fast zum Stillstand, wenn sich das Pixel ganz links befindet. Irgendwelche Ideen warum?

1
@insertusernamehere :) Ich denke, die ungolfed Version muss jetzt auch aktualisiert werden.

5
Sie sollten sich für den kleinsten Arbeitscode entscheiden, unabhängig von der Gültigkeit. Dinge wie die Verschmutzung des globalen Namensraums sind beim Golfen keine Seltenheit.
John Dvorak

2
Sie können )}}vom Ende fallen (der CSS-Parser beendet automatisch die Blöcke)
Zahnbürste

14

TI-BASIC, 44 Bytes

Für die TI-84 + CSE / CE-Rechner, die einige eingeschränkte BASIC-Farbgrafiken unterstützen.

AxesOff
ZSquare
While rand
Pt-Off(imag(Ans),real(Ans
7.5e^(-i6startTmr°
Pt-On(imag(Ans),real(Ans),13
End

Die Farbe hier ist Magenta oder Farbe 13 (man kann auch den MAGENTAToken verwenden).

Ich verwende randstattdessen 1für die Endlosschleifenbedingung, um eine winzige Verzögerung (~ 15 ms) zwischen dem Anzeigen des Pixels und dem erneuten Ausschalten des Pixels bereitzustellen.

Schalten Sie Ihren Taschenrechner in den Radian-Modus, bevor Sie dieses Programm ausführen. Ich zähle das nicht in der Größe, weil es der Standardzustand ist. Setzen Sie Ansden Wert ebenfalls auf 0, indem Sie vor dem Programm eine 0 eingeben. Dies ist auch die Standardeinstellung.

Vielen Dank an @quartata für das Testen dieses Programms (ich besitze keinen Farbrechner).


Naive Idee: Können Sie das Programm selbst aufrufen, anstatt eine while-Schleife zu verwenden, und wäre das kürzer?
Lynn

@ Mauris die while-Schleife ist 3 Token, während ein Programmname in der Regel länger ist
TheDoctor

1
@ Mauris Die While-Schleife besteht eigentlich aus 4 Bytes, und es ist möglich, 3 Bytes zu wiederholen, aber der Stapel wird nach weniger als 300 Aufrufen sehr schnell leer.
Lirtosiast

@Lembik Da [ codegolf.stackexchange.com/a/62203/39328] für Sie in Ordnung ist , werde ich dies nicht ändern, um es reibungsloser zu gestalten.
Lirtosiast

13

Java, 339 308 289 287 Bytes

import java.awt.*;class F extends Frame{{setSize(200,200);show();}int c;public void paint(Graphics g){g.setColor(new Color(8388736));g.fillRect((int)(99+Math.sin(--c*.01)*75),(int)(99+Math.cos(c*.01)*75),1,1);for(int i=0;++i<62864;)paint();}public static void main(String[] x){new F();}}

Vielen Dank an @Peter Lenkefi, dessen großartige Lösung mich zum Laufen gebracht und dessen For-Loop ich schamlos kopiert habe!

Die Hauptersparnis ergab sich aus der Umstellung auf reines AWT und dem Rendern direkt im Frame - ohne JPanel (oder Canvas). Ich habe den Zähler auch zu einer ganzzahligen Variablen gemacht, die durch einfaches Inkrementieren aktualisiert wurde, und ein paar Bytes gespeichert, um die Konstanten zu ändern, damit hier und da eine Ziffer entfernt werden kann.

EDIT: Danke an @Peter Lenkefi und @tobii für ihre Vorschläge in den Kommentaren. Beating HTML wäre schön - weiß jemand, wie man die Ausführung in Java zuverlässig anhält, ohne sleep () zu verwenden und Ausnahmen abfangen zu müssen?

EDIT 2: JAVA BEATS HTML (derzeit bei 290 Bytes!): D Das Timing ist jetzt maschinenabhängig, aber ~ 60 Sekunden für einen vollen Kreis auf meinem Computer, was laut @Lembik in Ordnung ist. Nochmals vielen Dank an @PeterLenkefi für seinen Vorschlag - meine Antwort ist mehr als die Hälfte seines :)

EDIT 3: @Ajay schlug vor, das "re" von "repaint" zu entfernen. Zwei Bytes weniger. Wir kommen dorthin :)


1
Wir müssen es unter HTML bekommen (also <290 im
Moment

1
@ PeterLenkefi: Leider kann ich die Klammern der Besetzung nicht retten; Das Casting des Sin / Cos-Ergebnisses unterbricht die Berechnung direkt. Ihr Repaint in Farbe () ist unglaublich schmutzig :)
Franz D.

1
@Troyseph Ich meinte zum Golfen;) Ich benutze Java für nichts.
Peter Lenkefi

1
Mit int c,iund das Auslassen intin for(int i=..sollte etwas mehr sparen.
Marco,

1
Sie brauchen für F nicht einmal die Klassendeklaration, können Sie einfach die Inline - Frame - Klasse erweitern: new Frame(){...}.
Magic Octopus Urn

9

Haskell, 143 136 Bytes

Dies verwendet das Gloss- Paket:

import Graphics.Gloss
main=animate(InWindow""(100,100)(0,0))white$ \t->color(makeColor 0.5 0 0.5 1).rotate(t*6).translate 38 0$circle 1

Die schönere Version ist

import Graphics.Gloss

purple :: Color
purple = makeColor 0.5 0.0 0.5 1.0

main :: IO ()
main = animate (InWindow "" (100,100) (0,0)) white $ \t ->
    color purple . rotate (t * 6) . translate 38 0 $ circle 1

Sie können Leerzeichen entfernen.
Rightfold

@ Elyse In der Tat, danke. Ich habe auch zwei nicht benötigte entfernt .0.
Frerich Raabe

8

HTML (CSS?), 167 Byte

Inspiriert von der Antwort von insertusernamehere

<style>body{position:fixed;left:50%;top:12%;width:1px;height:75vmin;border-top:1px solid #800080;animation:r 60s infinite linear}@keyframes r{to{transform:rotate(1turn

Ungolfed:

body {
    position: fixed;
    left: 50%;
    top: 12%;
    width: 1px;
    height: 75vmin;
    border-top: 1px solid #800080;
    animation: r 60s infinite linear;
}
@keyframes r {
    to {
        transform: rotate(1turn);
    }
}


Nur ein FYI, HTML + CSSwird normalerweise nicht als Programmiersprache betrachtet, es liegt jedoch am OP.
GamrCorps

1
Unter Firefox 41.0.2 wird nichts ausgeführt.
n̴̖̋h̴̖̋a̷̭̿h̷̭̿d̸̡̅ẗ̵̨́

1
Gerade auf Firefox 41.0.2 getestet, Win 10. Funktioniert gut für mich.
Lachlan Arthur

1
Funktioniert bei mir in 41.0.2 in Ubuntu.

1
+1 Gutes Denken, um sich bodyselbst zu animieren . :)
insertusernamehere

7

QBasic, 106

SCREEN 7
COLOR 5,15
DO
t=TIMER
CLS
PSET(99+99*COS(i),99+99*SIN(i))
i=i+ATN(1)/75
1IF TIMER<t+.1THEN 1
LOOP

Getestet auf QB64 , das besagt, dass es eine Linux-Version hat (obwohl ich es nur unter Windows ausprobiert habe).

  • SCREEN 7 Legt den Grafikmodus fest.
  • COLOR 5,15 Stellt dunkles Magenta als Vordergrundfarbe und helles Weiß als Hintergrundfarbe ein.
  • DO ... LOOPist eine Endlosschleife. Normalerweise sehen Sie es als DO WHILE ... LOOP(oder Sie können es LOOP WHILEstattdessen setzen oder UNTILfür eine negierte Bedingung verwenden), aber Sie können die Bedingung auch auslassen. In diesem Fall wird sie für immer wiederholt.
  • TIMER ist die Anzahl der Sekunden seit Mitternacht als Gleitkommawert.
  • CLS = Bildschirm löschen.
  • PSET SETZT einen Punkt auf eine Farbe, standardmäßig auf eine Vordergrundfarbe.
  • iBeginnt bei Null und zählt jedes Mal durch die Schleife um pi / 300 hoch, wodurch sich nach 600 Wiederholungen ein vollständiger Kreis schließt. Wir berechnen pi als 4 * arctan (1).
  • Die letzte Zeile wartet, bis 0,1 Sekunden verstrichen sind. Die Redewendung, die ich aus meinen QBasic-Büchern gelernt habe, war t# = TIMER: WHILE TIMER < t# + 0.1: WEND. #Für einen Unterschied von 0,1 Sekunden benötigen wir jedoch keine Zahlen mit doppelter Genauigkeit (markiert mit ), und es stellt sich heraus, dass die IF cond THEN [GOTO] lineSyntax 1 Zeichen kürzer als eine WHILE ... WENDSchleife ist.

Die Schleife wiederholt sich 600 Mal in 60 Sekunden und schließt so einen vollen Kreis.

Vorbehalte

  • Farbe 5, dunkles Magenta, wird #8B008Banstelle der angeforderten #800080(mit dem OP gelöscht).
  • Der Bildschirmmodus 7 ist 320x200, und daher hat der Kreis einen Durchmesser von 198, der nicht> = 0,75 der Breite, sondern> = 0,75 der Höhe ist (ebenfalls mit dem OP gelöscht).
  • Wenn Sie dies unter DOS QBasic ausführen, wird es im Vollbildmodus angezeigt, sodass das "Pixel" eigentlich kein einzelnes Pixel auf dem Monitor ist (es sei denn, Sie haben zufällig einen 320x200-Monitor). Aber es sollte nah genug sein. QB64 wird in einem Fenster ausgeführt, das die genauen Abmessungen verwendet, und daher ist das Pixel ein Literalpixel.
  • Zumindest in QB64 dauert dies ungefähr 65 Sekunden, um eine vollständige Umdrehung durchzuführen. Ich weiß nicht wirklich warum; Es muss entweder Rundungsfehler oder Overhead in der Schleife sein, obwohl ich versucht habe, beide zu mildern, ohne Erfolg. Theoretisch sollte der Code so wie er ist korrekt funktionieren. In der Praxis kann man den Betrag, um den iinkrementiert wird, so lange ändern, bis eine Umdrehung nahe genug bei 60 Sekunden liegt. (Versuchen Sie einen Nenner von 69 oder 68.)
  • Kein schönes Bild hier. :( Die Qualität von LICEcap war nicht gut genug, um ein einzelnes Pixel genau zu erfassen.

Dieser Code funktioniert perfekt für mich in Linux. Danke.

Dies läuft tatsächlich in QBasic 4.5, aber der Hintergrund ist nicht wirklich weiß :). Hier ist ein GIF, das kompiliert und ausgeführt wird: codegolf.square7.ch/altqb.gif
mınxomaτ

@ mınxomaτ Seltsam, Farbe 15 sollte entweder Weiß oder Hellgrau ergeben, je nachdem, was ich zu wissen glaubte ... das sieht aus wie Hellcyan (Farbe 11). Was macht SCREEN 8statt zu 7tun?
DLosc

Gleicher grünlicher Hintergrund. Aber Sie haben recht, laut Spezifikation sollte es weiß sein. Ich habe auch Farbe 7 (grau) ausprobiert und es hat sich als grau erwiesen. Ihre Lösung ist also absolut in Ordnung, aber mit meinem DOS stimmt etwas nicht.
Mittwoch,

7

mIRC-Skript, 184 Bytes

alias g {
window -p @m -1 -1 100 128
f
}
alias f {
inc %s 1
set %o $calc(%s *38/360)
clear @m
drawdot -r @m $rgb(128,0,128) 1 $calc($cos(%o)*38+50) $calc($sin(%o)*38+52)
.timer 1 1 f
}

Dies ist für mIRC in Wine optimiert. Starte mIRC, drücke Alt + Rund füge es ein, schließe den Editor und starte es mit/g

Vorschau

Das Timing auf dem GIF ist möglicherweise nicht korrekt.


Das ist neu bei mir! Es wäre großartig, wenn Sie ein animiertes GIF daraus machen könnten.

Es war eine der ersten Sprachen, die ich für das Programmieren gebraucht habe!
Varis

6

R, 170 Bytes

library(animation);for(i in 1:60){par(mar=rep(0,4));plot.new();t=2*pi*(1-i)/60;points(3*cos(t)/8+.5,3*sin(t)/8+.5,pch=19,col="#800080");ani.record()};repeat{ani.replay()}

Es beruht auf paket animation. Und hier ist ein GIF, um zu zeigen, dass es funktioniert:

In einem Fenster

Ungültiges Speichern der Lösung in einem GIF (139 Byte):

animation::saveGIF({for(i in 1:60){par(mar=rep(0,4));plot.new();t=2*pi*(1-i)/60;points(3*cos(t)/8+.5,3*sin(t)/8+.5,pch=19,col="#800080")}})

Hierfür muss ImageMagick installiert sein. Das Ergebnis wird als GIF gespeichert.

! [Rund und rund geht es


Dies ist jedoch großartig. Die Herausforderung benötigt den Code, um auf den Bildschirm / das Fenster zu schreiben.

Oh, das habe ich nicht verstanden.
Plannapus

2
Hier ist es in einem Fenster.
Plannapus

6

Rubin mit Schuhen, 159 Bytes

Shoes.app{animate{background stroke white
fill purple
r=0.75*c=self.width/2
t=Time.now
m=Math
rect c+r*m.sin(a=(t.sec+t.usec*1e-6)*m::PI/30),c-r*m.cos(a),2,2}}

Das Pixel ist eigentlich die Spitze des Sekundenzeigers einer analogen Uhr. Dieser ist also absolut präzise.

Rubin mit Schuhen, 134 Bytes

m=Math
Shoes.app{animate{|f|r=0.75*c=self.width/2
background stroke white
fill purple
rect c+r*m.sin(a=f*m::PI/360),c-r*m.cos(a),2,2}}

Dies ist eine auf Frames pro Sekunde basierende Alternative, die von den anderen Antworten inspiriert ist. Obwohl die Dokumentation angibt, dass die Standard-FPS 10 beträgt, zeigen praktische Tests, dass es sich tatsächlich um 12 handelt.

Für beide Lösungen gilt: "Die Breite des Kreises sollte 0,75 (entsprechend gerundet) der Breite des Bildschirms oder Fensters sein." Berechnen Sie anhand der Fensterbreite, damit der Pixel gelegentlich den unteren Rand eines nicht quadratischen Fensters verlässt. Ich bin mir nicht sicher, wie mit einem solchen Fall umgegangen werden soll. (Verwenden Sie ein Minimum an Breite und Höhe? Gehen Sie auf einem ovalen Pfad?) Das Fenster beginnt mit der Standardgröße 600 x 500 und ist in der Größe veränderbar.


Sehr erfreut, eine Ruby-Lösung zu sehen! Jetzt brauchen wir Python, Perl, ....

5

D, 286 280 Bytes

(392 wenn normal geschrieben)

import simpledisplay,std.math;void main(){auto w=new SimpleWindow(100,100);auto c=50;auto r=c*2/3;int t;auto y=600/PI;w.eventLoop(50,{auto p=w.draw();p.clear;p.outlineColor=Color(128,0,128);p.drawPixel(Point(c+cast(int)(r*cos(t/y)),c+cast(int)(r*sin(t/y))));if(++t==1200)t=0;});}

Oder so, wie ich es ursprünglich ohne Golf geschrieben habe:

import simpledisplay, std.math;

void main() {
        auto window = new SimpleWindow(100, 100);
        auto c = window.width/2;
        auto r = c*2/3;
        int t;
        float cycle = 20*60/(PI*2);
        window.eventLoop(50, {
                auto p = window.draw();
                p.clear;
                p.outlineColor = Color(128, 0, 128);
                p.drawPixel(Point(c + cast(int) (r*cos(t/cycle)), c + cast(int) (r*sin(t/cycle))));
                if(++t == 20*60)
                        t = 0;
        });
}

Hängt von simpledisplay.d und color.d ab, die sich hier befinden: https://github.com/adamdruppe/arsd

Laden Sie einfach diese beiden einzelnen Dateien herunter und speichern Sie sie in demselben Verzeichnis wie den obigen Code. Dann: dmd yourfile.d simpledisplay.d color.dKompilieren und starten Sie sie einfach.

Meine kleine Bibliothek wurde geschrieben, um schnelle Animationen wie diese ziemlich einfach zu machen, damit dies gut zu seinen Stärken spielt! Leider mag ich lange Bezeichnernamen und habe keinen PointKonstruktor angegeben, floatder 18 Byte Casting und ... ein paar Dutzend Schreibweisen für meine Methodennamen hinzufügt.


1
Das erste Argument für eventLoop ist übrigens ein Millisekunden-Timer. Wenn es nicht Null ist, erstellt es automatisch einen Timer für Sie und ruft die Funktion mit Nullargumenten auf, die in diesem Intervall bereitgestellt werden. (eventLoop kann auch Funktionen mit MouseEvent- oder KeyEvent-Argumenten übernehmen, um Benutzereingaben zu verarbeiten.) Also 50 Millisekunden Intervall = 20 Bilder pro Sekunde, also 20 * 60 = Zyklus in 60 Sekunden.
Adam D. Ruppe

Ich denke, wie Sie die Antwort geschrieben haben, nimmt der Leaderboard-Code 392 statt 280 auf.

5

C #, 379 365 Bytes

using System.Windows.Forms;using static System.Math;class P:Form{static void Main(){var f=new P();var p=new PictureBox();f.SetBounds(0,0,1000,1000);f.Controls.Add(p);f.Show();for(var i=0d;;i+=PI/3000){p.SetBounds((int)(Cos(i)*375+500),(int)(Sin(i)*375+500),1,1);p.CreateGraphics().Clear(System.Drawing.Color.FromArgb(-8388480));System.Threading.Thread.Sleep(10);}}}

Kommt drauf an System.Windows.Formsund System.Drawingläuft. Die Ausgabe erfolgt in einem 1000x1000-Fenster.


Kann einige Bytes mitvar
pinkfloydx33

Speichern Sie ein weiteres Byte mithilfe des statischen Imports auf dem System math
pinkfloydx33

Sie können Ihren Code im System - Namespace und entfernen Sie alle anderen Verweise auf System erklären und speichere ich denke , 10 Bytes
JustinM - wieder einzusetzen Monica

5

SVG, 177 Bytes

<svg><g transform=translate(75,75)><circle id=x r=.5 cx=56 fill=#800080><animateTransform xlink:href=#x attributeName=transform type=rotate to=360 dur=60s repeatCount=indefinite

Ungültiges Markup von der Hölle zum Frühstück, aber es läuft (zumindest in Chrome). Wie bei einer HTML5-Zeichenfläche scheint die Standardgröße für eine SVG-Datei 300 x 150 zu sein. Dies wird also vorausgesetzt.

Bearbeiten: Hoppla, ich hatte versehentlich in einer Dauer von 6 statt 60 verlassen. Das behoben, aber auch festgestellt, dass 0.5das als gerecht funktioniert .5, also keine Änderung in der Byteanzahl.


5

X86-Maschinencode - 150 146 149 133 127 Bytes

Golf Version:

        00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
        --------------------------------------------------------------------
0000    B0 13 CD 10 BA C9 03 88 F1 BE 76 01 F3 6E B0 0F - °.Í.ºÉ.ˆñ¾v.ón°.
0010    49 68 00 A0 07 F3 AA 64 66 A1 6C 04 66 A3 80 01 - Ih. .óªdf¡l.f£€.
0020    64 66 A1 6C 04 66 2B 06 80 01 66 50 89 E5 D9 EB - df¡l.f+.€.fP‰åÙë
0030    D8 C0 DA 4E 00 DE 34 D9 FB BB 7D 01 DE 0F DE 47 - ØÀÚN.Þ4Ùû»}.Þ.ÞG
0040    FE DF 5E 02 DE 0F DE 47 FE DF 5E 00 5F 69 FF 40 - þß^.Þ.ÞGþß^._iÿ@
0050    01 58 01 C7 BB 88 01 8B 0F 39 CF 74 C3 30 C0 AA - .X.Ç»ˆ.‹.9ÏtÃ0Àª
0060    4F 89 3F 89 CF B0 0F AA 31 C0 FE C4 CD 16 74 B0 - O‰?‰Ï°.ª1ÀþÄÍ.t°
0070    B8 03 00 CD 10 C3 20 00 20 44 04 64 00 4B 00    - ¸..Í.Ã . D.d.K.

'Ungolfed', Quellfassung:

; golfCrcl.asm
;
; - 16 bit implementation of an animated pixel that circumscribes a circle.
; - 127 bytes .COM file
;
;   - enhzflep -
;   31 Oct 2015 - initial
;               - set closest colour to desired #800080
;    2/3 Nov 2015 - removed unnecessary instuctions, used BX register to index mem by fpu
;               - removed .data section alignment, better register use in curPixel/lastPixel compares and calcs, reusing value of si after palette setting
[section .text]
[bits 16]
[org 0x100]
EntryPoint:
;   mov     fs, bx          ; bx is 0 on entry. Set fs seg register to this

    ; set graphics mode 320x200
    mov     al, 0x13
    int     0x10

    ; set colour #0 to be as close to the desired one as possible
    ; the vga palette registers are 6 bits by default (some models allow switching to 8 bits)
    ; therefore, we cant represent all of the 16.7m colours that we can in 24bit modes
    ; we're limited to 'just' 64*64*64 = 262,144 (256k) colours. Unfortunately, #800080 is not
    ; a colour we can represent exactly in mode13 or any other mode with 6 bit regs.
    mov     dx, 0x3c9
    mov     cl, dh
    mov     si, desiredCol
    rep     outsb                           ; cx now=0 and si now points to totalTicksNeeded

    ; clear the screen to white
    mov     al, 0x0f                        ; index of a colour thats already FF,FF,FF
;   xor     cx, cx                          ; cx = 0 - its zeroed by the rep outsb instruction above.
    dec     cx                              ; cx = FFFF
    push    word 0xA000                     ; segment of video memory
    pop     es                              ; pop it into es
    rep     stosb                           ; es:[di] = 0F, inc di, dec cx. If cx != 0 then repeat.

    ; setup the timing stuff
    mov     eax, [fs:0x046C]                ; 32 bit value updated at 18.2Hz by bios
    mov     [initialTicks], eax

.drawLoop:
    mov     eax, [fs:0x046C]                ; 32 bit value updated at 18.2Hz by bios
    sub     eax, [initialTicks]             ; eax = curTime-startTime (in increments of 1/18.2 of a second --- 182 = 10 seconds)

    push    eax                             ; number of elapsed clock ticks - ready to be loaded by fpu. Also stack space for calc result
    mov     bp, sp                          ; get pointer to last element pushed onto the stack
    fldpi                                   ; st0 = pi
    fadd    st0                             ; st0 = 2pi
    fimul   long [bp]                       ; (currentTick/requiredTicks) * 2pi
;   fidiv   word [totalTicksNeeded]
    fidiv   word [si]                       ; si still points to totalTicksNeeded after setting the palette earlier
    fsincos                                 ; st0 = cos(old_st0), st1 = sin(old_st0)

    mov     bx, radius
    fimul   word [bx]                       ;   fimul word [radius] -  cos(angle)*radius
    fiadd   word [bx-2]                     ;   fiadd word [origin] -  origin + cos(angle)*radius
    fistp   word [bp+2]                     ; ---- X-coord -------

    fimul   word [bx]                       ;   fimul   word [radius]
    fiadd   word [bx-2]                     ;   fiadd   word [origin]
    fistp   word [bp+0]                     ;  ---- Y-coord -------

    ;---------------
    pop     di                              ; calculated Y-coord
    imul    di, 320                         ; multiply it by the screen width
    pop     ax                              ; calculated X-coord
    add     di, ax                          ; di = x + (pixels_per_row * y_coord)

    mov     bx, lastIndex
    mov     cx, [bx]                        ; get the mem index for the last pixel
    cmp     di, cx                          ; check if we're indexing the same pixel as last time through the loop
    je      .drawLoop                       ; if so, return to start of loop - no need to delete and redraw the pixel in the same spot.

    xor     al, al                          ; col index 0
    stosb                                   ; draw our purple pixel
    dec     di                              ; stosb advanced di to the next pixel, undo this (stosb followed by dec di is still shorter than mov es:[di], al)
    mov     [bx], di                        ; save the pixel's mem address
    mov     di, cx                          ; restore index of pixel drawn last time through the loop
    mov     al, 0x0f                        ; pal index of white
    stosb                                   ; erase the last pixel

    ; check for a keystroke
    xor     ax, ax
    inc     ah
    int     0x16
    jz      .drawLoop                           ; loop if no keys pressed

.drawingDone:
    ; set text mode 80x25
    mov     ax, 0x3
    int     0x10

    ; program exit
    ret                                     ; Dos pushes a 0000 onto the stack and copies CD 20 to offset 0 of our code-seg
                                            ; before it invokes our program. ret jumps back to that CD 20 (int 0x20) instruction

; Since this is a .COM file, all program, data and stack exist in the same segment. 
; Using .text and .data sections only improves program readability - doing so only has minor effects on the binary produced.
;
; In this case, the assembler word aligns anything in the data section. This may have the effect of adding a padding byte,
; which we really dont need/want here. Data is machine-word aligned to improve the speed of access for the hardware. Machine-word
; is used to refer to the size of an int. In the case of 16 bit code, this will generally be 16 bits, 32 bit code has 32 bit words
; and so on. This code is 16 bit, so things should be aligned to word boundaries for maximum execution speed
;
;[section .data]
desiredCol          db  0x80/4, 0x00, 0x80/4        ; palette registers are only 6 bit.
totalTicksNeeded    dw  1092
origin              dw  100
radius              dw  75

; ticks/second = 18.2
; totalTime = 60 seconds
; totalTicks = 1092 (18.2 * 60)
; degreesPerTick = 360 / 1092 = 0.3296703
; timerTicksAddr = 0040:006C (0000:046C) dword
[section .bss]
initialTicks    resd    1
lastTickValue   resd    1
lastIndex       resw    1

Herunterladbare, Base64-codierte Version

data:application/octet-stream;base64,sBPNELrJA4jxvnYB826wD0loAKAH86pkZqFsBGajgAFkZqFsBGYrBoABZlCJ5dnr2MDaTgDeNNn7u30B3g/eR/7fXgLeD95H/t9eAF9p/0ABWAHHu4gBiw85z3TDMMCqT4k/ic+wD6oxwP7EzRZ0sLgDAM0QwyAAIEQEZABLAA==

Kopieren Sie diese Adresse und fügen Sie sie in Ihren Browser ein. Benennen Sie die resultierende Datei um golfcrcl.comund führen Sie sie in einer DOS-Umgebung aus, z. B. DosBox.


Das ist toll! Getestet und funktioniert einwandfrei.

1
Oh Schnappschuss! Ich habe gerade festgestellt, dass Sie eine Farbe angegeben haben, die verwendet werden soll, und habe sie völlig ignoriert. : oops: Ich werde das etwas später beheben. Der Farbindex sollte 0x5C anstelle von 0x09 sein (unter der Annahme, dass die Dosbox die Palette korrekt einstellt, sonst werde ich nur Farbe 1 neu
zuordnen

4

Mathematica 208 185 139 Bytes

Bewegt ein lila Pixel um ein als Bild verwendetes Array.

Methode 1 139 Bytes

n=900;Dynamic@Refresh[t=DateValue@"Second";ReplacePixelValue[Image@Array[1&,{n,n}],
400{Cos[z=Pi/30t],Sin@z}+450->Purple],UpdateInterval->1]

Methode 2 154 Bytes

Zeichnet ein Pixel innerhalb von 60 Sekunden auf einer Kreisbahn.

Dynamic@Refresh[t=DateValue@"Second";Graphics[{AbsolutePointSize@.01,Purple, 
Point[{Cos[z=Pi/30t],Sin@z}]},PlotRange->1,ImageSize->Full],UpdateInterval->1]

Methode 3 193 Bytes

Dies zeichnet eine Uhr mit Häkchen und Beschriftungen in Weiß, für die der Sekundenzeiger ein Pixel ist.

Dynamic@Refresh[ClockGauge[AbsoluteTime[],TicksStyle->White, 
GaugeMarkers->{None,None,Graphics[{White,Disk[],Purple, 
AbsolutePointSize[.01],Point@{3,0}}]},PlotTheme->"Minimal"],UpdateInterval->1]

Ich verstehe, grundsätzliche LTR-Verwirrung ... Aber wie auch immer, Sie können den Raum zwischen 30und entfernen t.
LegionMammal978

4

Obj-C ++ / Cocoa, 777 678 668 657 643 628 Bytes

#include <Cocoa/Cocoa.h>
float r;@implementation V:NSView-(void)drawRect:(NSRect)d{CGContext*c=(CGContext*)NSGraphicsContext.currentContext.graphicsPort;CGContextSetRGBFillColor(c,.5,0,.5,1);CGContextFillRect(c,(CGRect){cos(r)*38+50,sin(r-=pi/300)*38+50,1,1});[NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(x)userInfo:0 repeats:0];}-(void)x{self.needsDisplay=1;}@end
int main(){NSRect b={0,0,100,100};NSWindow*w=[[NSWindow alloc]initWithContentRect:b styleMask:1 backing:2 defer:0];[w orderFront:0];w.backgroundColor=[NSColor whiteColor];w.contentView=[[V alloc]initWithFrame:b];[NSApp run];return 0;}

Das ist wahrscheinlich der schlechteste Weg, etwas zu tun, aber ich dachte, ich würde es versuchen.

Kann auf einem Mac (jedenfalls auf meinem) mit g++ -framework Cocoa file.mmdem Terminal kompiliert und vom Terminal aus ausgeführt werden ( ctrl-Czum Beenden, da es sich nicht um eine App handelt).

Bildschirmfoto

Bearbeiten: 99 Bytes gespeichert: Problem behoben main(), das unter OS X 10.10 (1. Version nur unter 10.8) ausgeführt werden konnte. Das Übersetzen / Drehen wurde zugunsten einfacher Trigger-Berechnungen übersprungen.

Bearbeiten: Weitere 10 Bytes gespeichert: Wurde geändert, um nur orderFrontdas Fenster anzuzeigen. Macht es zwar nicht zum vorderen Fenster, aber auch nicht orderFrontAndMakeKey, also ...

Bearbeiten: Weitere 11 Bytes gespeichert: Übersprungen NSMakeRectund eine Ziffer gefunden, die einfach gehen musste.

Bearbeiten: Weitere 14 Bytes gespeichert: musste der NSTimerInstanz nichts zugewiesen werden und kann anscheinend die Initialisierung rauf Null überspringen .

Bearbeiten: Weitere 15 Bytes gespeichert: Ich kann nicht aufhören. Hilfe schicken.


Danke. Obj-C ++ ist der klare Gewinner im derzeit längsten Wettbewerb für kürzesten Code!

14
+1 für den Gewinn des am meisten animierten nicht animierten Bildwettbewerbs .
Lynn

4

Javascript / Processingjs, 175 173 156 153 152 Bytes

var s=256,e,h,m;void setup(){size(s,s);h=s/2;}void draw(){background(-1);m=-millis()*(PI/36000);stroke(h,0,h);e=s/2*0.75;point(h+sin(m)*e,h+cos(m)*e);}

Zum Ausführen: Besuchen Sie entweder http://www.openprocessing.org/sketch/226733 , um die Aktion mit processing.js zu sehen, oder laden Sie processing 2.0 von processing.org herunter , fügen Sie den Code in die Verarbeitungs-IDE ein, wählen Sie den Javascript-Modus aus und beobachten Sie es geht.


Lol, du hast Processing 20 Sekunden vor mir gepostet.
PurkkaKoodari

Ist der Header in dieser Antwort falsch? Es wird nicht in der Bestenliste angezeigt.

1
Das habe ich verpasst, jetzt bin ich dran.
Timothy Groote

1
es sollte nun die 60 Sekunden-Anforderung erfüllen
Timothy Groote

1
background(-1)ist ein Byte kürzer alsbackground(255)
Kritixi Lithos

3

Ulme , 274 Bytes

import Color exposing (..)
import Graphics.Collage exposing (..)
import Time exposing (..)
main=Signal.map((\t->collage 200 200 [move(75*cos(-2*pi*t/60),75*sin(-2*pi*t/60))(filled(rgb 128 0 128)(circle 2)),outlined(solid black)(square 200)])<<inSeconds)(every(0.01*second))

Probieren Sie es aus oder bearbeiten Sie es in Ihrem Browser:

Beachten Sie, dass wir, wenn wir die Importe loswerden und den Umriss um die Leinwand zeichnen, nur noch 149 Bytes haben, aber das ist wahrscheinlich Betrug!


Whoops, behoben! Ich wurde beim Testen ungeduldig
jmite

1
Das ist sehr schön und es ist toll, etwas in einer funktionalen Sprache zu bekommen. Wir brauchen jetzt nur Haskell und Scala!

2
@Lembik Ich habe gerade eine Haskell-Version hinzugefügt
Frerich Raabe

3

C # 301 Bytes

using System.Windows.Forms;using System.Drawing;class P:Form{static void Main(){Application.Run(new P());}P(){Paint+=(o,e)=>{var g=e.Graphics;g.Clear(Color.White);g.TranslateTransform(150,150);g.RotateTransform(System.DateTime.Now.Second*6);g.FillRectangle(Brushes.Purple,105,0,1,1);Invalidate();};}}

Hängt von den Standardgrößenmetriken ab. Größe und Position können in Abhängigkeit von einer Reihe von Faktoren etwas abweichen. Kann oder kann nicht schrecklich flackern; Um dies zu lösen, fügen Sie Folgendes hinzu:

SetStyle(ControlStyles.OptimizedDoubleBuffer|ControlStyles.AllPaintingInWmPaint,true);

3

Lua + Löve, 189 Zeichen

t=0
m=math
l=love
g=l.graphics
function l.update(d)t=t+d end
function l.draw()a=t*m.pi/30
g.setBackgroundColor(255,255,255)g.setColor(127,0,127)g.point(400+225*m.cos(a),300+225*m.sin(a))end

love.update()erhält als Parameter die seit dem letzten Frame verstrichene Zeit. Zeichnet im Standardfenster 800 x 600 an festen Koordinaten, da die Größe des Fensters ohnehin nicht geändert werden kann.


Die erste Antwort von lua! Danke.

3

Python 2 + Pygame, 221 198 193

exec'from %s import*;'*3%('math','pygame','time')
_,p,D=[255],128,display
S=D.set_mode(_*2)
while 1:S.fill(_*3);S.set_at(map(lambda f:int(p+f(pi*(time()%60)/30)*96),(cos,sin)),(p,0,p));D.flip()

1
Pythontastisch großartig!

Jetzt brauchen wir nur noch eine Python + Turtle-Lösung.

3

C (unter Verwendung von SDL1.2), 237 233

#include <SDL.h>
#define P(f)(int)(128+96.0*f(3.14*((int)(.001*SDL_GetTicks())%60)/30))
main(){SDL_Surface*s=SDL_SetVideoMode(255,255,32,0);while(1){int*p=s->pixels;memset(p,255,260100);p[P(cos)+s->w*P(sin)]=0x800080FF;SDL_Flip(s);}}

Kompiliert und läuft mit gcc -I/usr/include/SDL snippet.c -lSDL -lm && ./a.out


Großartig! Ich dachte, niemand würde es tun.

2

ActionScript 2.0, 151 Byte

Leider ist Adobe Flash keine Freeware und Google gibt an, dass es unter Linux ohne VM oder Wine nicht funktioniert (und selbst mit Wine funktioniert es meistens nur ). Trotzdem wollte ich sehen, wie gut es bei dieser Aufgabe abschneiden würde. Ziemlich gut, es stellt sich heraus.

createEmptyMovieClip("p",0)
p._x=p._y=r=200
p.beginFill(0x800080)
p.moveTo(r,0)
p.lineTo(r-1,0)
p.lineTo(r,1)
onEnterFrame=function(){p._rotation+=.25}

Die Grundidee: Erstellen Sie ein neues Movieclip-Objekt, positionieren Sie es bei (200, 200) und zeichnen Sie dann einen Punkt 2 darin, 200 Pixel weiter rechts. Jetzt ist der Movieclip 200 Pixel breit und 1 Pixel hoch. Der Drehpunkt sind die ursprünglichen Koordinaten, mit denen wir begonnen haben. Wenn wir also die _rotationEigenschaft ändern , bewegt sich der Punkt in einem Kreis um den Punkt (200, 200). Praktischerweise _rotationist in Grad; 0,25 Grad / Bild * 24 Bilder / Sekunde * 60 Sekunden / Minute = 360 Grad / Minute.

Erstellen Sie ein neues Flash-Dokument 1 , öffnen Sie das Bedienfeld „Aktionen“ und fügen Sie den obigen Code ein, um die Installation von Grund auf neu zu starten . Es ist keine weitere Anpassung erforderlich, vorausgesetzt, der Standardhintergrund ist weiß, die Leinwandgröße beträgt 550 x 400 und die Bildrate 24 fps. Drücke Strg-Enter und schau es dir an.

Wenn Sie nicht über Flash selbst verfügen, können Sie die Ergebnisse dennoch mit dem kostenlosen Flash Player anzeigen, der mit den meisten modernen Browsern geliefert werden sollte. Laden Sie die SWF - Datei hier . Wenn Sie es nicht abspielen können, laden Sie auch diese HTML-Seite herunter und öffnen Sie sie mit der SWF-Datei im selben Verzeichnis.

1 Getestet mit Adobe Flash CS4 Professional und Auswahl von "Flash-Datei (ActionScript 2.0)", wenn Sie gefragt werden, welcher Typ von neuer Datei erstellt werden soll.

2 Eigentlich ein kleines Dreieck, wie Sie sehen werden, wenn Sie genug hineinzoomen. Es war die golferischste Art, einen Punkt zu zeichnen.


2

JavaScript w / jQuery, 205 Byte

y=75;with($('<canvas/>').appendTo(document.body)[0].getContext('2d')){fillStyle='#800080';translate(y,y);(f=function(){clearRect(-y,-y,y*2,y*2);fillRect(0,56,1,1);rotate(Math.PI/300);setTimeout(f,100)})()}

jsfiddle , schnipsel unten

Dies ist vielleicht nicht ganz nach dem Buch. Die Standardgröße einer Leinwand (mindestens in Chrome) beträgt 300 x 150, daher habe ich den Kreis auf 75 x 75 zentriert. Ich könnte es auf 150x75 zentrieren und seinen Radius auf 113px (~ 75% der Breite) einstellen, aber es würde manchmal außerhalb der Leinwand sein, also habe ich stattdessen ~ 75% der Höhe gewählt.

Aber es ist sowieso nicht besonders kurz, also meh '


2

Blitz 2D / 3D , 126 Bytes

Graphics 180,180
ClsColor 255,255,255
Color 128,0,128
While 1
Cls
ang#=ang+3
Plot 90+67*Cos(ang),90+67*Sin(ang)
Delay 500
Wend

Leider wird diese Sprache nur unter Windows unterstützt (obwohl sie möglicherweise in Wine ausgeführt wird).


2

Javascript ES6, 202 Bytes

a=0;with((D=document).body.appendChild(D.createElement`canvas`).getContext`2d`)with(Math)setInterval((f=t=>t(a+=PI/6e3)*60+75)=>fillRect(f(cos,clearRect(0,0,150,150),fillStyle=`#800080`),f(sin),1,1),10)

Getestet in Firefox 41.

Wie die andere (fast) reine Javascript-Antwort ist der Kreis auf 75 x 75 zentriert, da die Standardgröße der Zeichenflächenelemente 300 x 150 ist, wie in den HTML-Spezifikationen definiert.


2

Matlab, 141 136

Ich übermittle das nur, damit Sie, Lembik, eine vollständige Liste haben.

v=-100:100;
[y,x,m]=ndgrid(v,v,0);
n=75;
while 1;
    pause(1);
    c=m;
    c(x+i*y==round(n))=1;
    imshow(c);
    colormap([1,1,1;.5,0,.5]);
    n=n*exp(pi*i/30);
end

Alte Version:

v=-100:100;
[x,y,m]=ndgrid(v,v,0);
while 1;
c=m;
c(x+i*y==round(75*(-1)^(s/30)))=1;
imshow(c);
colormap([1,1,1;.5,0,.5]);
s=mod(s-1,60);
pause(1);
end
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.