• Hier mal was lustiges aus dem Paralleluniversum - und vielleicht ja auch für Altgerät interessant. Etwa als Benchmark (?) - statt Apfelmännchen. Evtl. mit Sinustabellen ausreichend performant auch auf Z80 und Co.



    Hier ist gewissermaßen die Vorgeschichte https://www.youtube.com/shorts/FIZI3k7mTvA


    und da die eigentliche Webseite dazu (die Buttons bei den Bildern anklicken) :


    https://www.a1k0n.net/2011/07/20/donut-math.html



    in C kann das dann auch so aussehen


    Donut-shaped C code that generates a 3D spinning donut
    "Donut math: how donut.c works" blog post by Andy Sloane:https://www.a1k0n.net/2011/07/20/donut-math.htmlDeobfuscated code: https://bit.ly/2BITbQm
    www.youtube.com

    Donut-shaped C code that generates a 3D spinning donut


    und so sieht der Programmcode dann in voller Schönheit aus


    https://bit.ly/2BITbQm


    donut_deobfuscated.c
    Shared with Dropbox
    www.dropbox.com



    und wenn es jemand eintippt, kann man auch zuschauen


    https://www.youtube.com/watch?v=ux0jQNvCExQ

    Spinning Donut with C ( C Programming )


    na ja - und mittlerweile ist es wohl ein Internet Meme geworden


    C++ Spinning Doughnut in Terminal
    #shorts #short #shortvideo #shortsvideo #shortsfeed #shortvideos #shortsyoutube #shortfeed #programming #program #programmer #programminglanguage #coding #co...
    www.youtube.com

    Satisfying ascii animation with C 😉 - The doughnut shaped code that generates a spinning 🍩
    #shorts #satisfying #ascii_art #ascii#animation #codeWithC #learnCA Doughnut shaped code that generates a spinning doughnut 🍩 😎
    www.youtube.com


    einfach mal nach "donut" oder "donut.c" oder "donut.py" suchen gehen.



    Gern auch mal in Rainbow-Colors


    Donut C-Code that produces spinning Rainbow Donut
    Well this is somehow my creation but also I heavily used existing code bases.Links for source code down here ^^ The original spinning donut creator is still:...
    www.youtube.com

    Donut C-Code that produces spinning Rainbow Donut


    .

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Modifikation : x2 in Size und Lissajous dazu, ASCII bißchen agbeändert




    und als "Filmdokument" (vereinfacht evtl das Ansehen)


    double Sized (160Z) + Lissajous, 800px
    nur double Sized (160Z), fullpix
    donut2xLiss,800px,MP4.zipdonut2xFilmMP4.zip

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Müßte man eigentlich mal schauen, wie man in so einem Terminal Fettdruck anzeigen kann oder das "N" direkt an die aalib übergebn und den passenden Wert (für 0-63 oder sogar 0-255 ) dann da übernimmt.


    Außerdem gibt es ja wahrscheinlich sogar passende "gute" Textstrings mit "aufsteigender Helligkeit" und paar mehr Zeichen als 12.



    Ist schon interesssant, auch weil das ja nicht viel anders ist, was die Leut' da so rumspielen, als das am 128er/Spectrum gemacht worden ist. Nur eben jetzt mit großen Maschinen die künstlich (ASCII) häßlich gehalten werden. ;) Sehr schön sind auch bei YT die Sachen zu dem Python Turtle Modul. Einfach mal googeln/yt-uben - das ist doch alles sehr bekannt. Verfolgerkurven und solche rotationssymmetrischen Bildchen und auch Rekursionsgrafikbildchen [YT].

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Auf meinem Rechner wollte er zuerst nicht kompilieren:


    donut.c:50:9: warning: implicit declaration of function ‘usleep’; did you mean ‘fseek’? [-Wimplicit-function-declaration]

    usleep(30000);


    Das lies sich mit

    #include <unistd.h>


    im Source und mit


    gcc donut.c -o donut -lc -lm


    lösen... :)



    PS: -lm hätte auch schon gereicht... macht der Gewohnheit... ;)

  • stimmt - das "Mikrosekundenwarten" will da eigentlich angesagt werden, aber hier lief es auch ohne Warnung durch



    Ich habe mal noch eine "flexible" Variante gebastelt.


    Damit kann man das Ganze auch sehr einfach an ein großes Terminalfenster anpassen. Da sieht der Donut gleich nochmal viel leckerer aus. Mit bißchen Abstand zum Bildschirm (>=3m) wird es dann schon fast eine Grafikdemo.





    Compilen wie eben beschrieben. Aber: man kann jetzt in den Zeilen ganz am Anfang ( Zeile 7 und 8 ) die Wunsch-Auflösung einstellen. Einfach für 80 x 24 z.B. mal 160 x 44 oder was entsprechend größeres vorgeben und neu übersetzen.



    DonutFlex.c :






    und hier ist gleich noch die Anschlußbastelei, wo das Lissajous (s.o.) und das leicht andere ASCII wieder mit drin ist und zusätzlich eine Änderung in der Tiefe. Video gibt es auch, s.u. Damit das schön aussieht, sollte das Fenster schon etwas größer sein als die Standardeinstellung. Bei ganz hohen Auflösungen und wenn der Kringel weit nach vorn kommt, entstehen Artefakte, die man durch engeres Zeichnen der Ringe beheben kann - das bedeutet, daß man in Zeile 35 die Schrittweite für j kleiner macht, z.B. von 0.035 auf 0.015. Es wird dadurch dann aber insgesamt auch deutlich langsamer.







    Video von der Flex-Lissajous-Deepvariation Variante
    DonutLissZ_MP4.zip


    .

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

    Einmal editiert, zuletzt von ThoralfAsmussen ()

  • Sehr hübsch ist auch, wenn man die Bewegung im FlexLissajousDeep noch ein bißchen "erratischer" macht. Das geht einfach, und komplett ohne Zufallszahlen, durch dezentes Ändern der Counter A, B. Etwa indem man die Zeilen 65 und 66 ersetzt/erweitert durch


    entweder


    Code
            A += 0.170+(sin(B)/7);
            B += 0.135+(sin(A)/4);


    oder z.B.


    Code
            A += 0.270+(sin(B)/3);
            B += 0.235+(sin(A)/4);


    und evtl. die Wartechleife bißchen anpaßt, z.B. usleep(7500); .

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Tiefen-Colouring (dunkel ist hinten) ist auch einfach


    dazu wird die Tiefe dz in einen Integer Wert gewandelt und dann mit auf das N in Zeile 55, welches das ASCII Zeichen auswählt/bestimmt, aufaddiert. Damit das schön funktioniert sollte der Wert von dz (in Zeile 34 berechnet) evtl. noch angepaßt werden, d.h. wenn wie im Bsp oben dort Werte für dz von -1 bis +5 herausfallen, sollte man evtl. nach "oben" hin ausgleichen, damit auch die Stufe "-1" in die ASCII Bestimmung eingeht. In diesem Fall würde man dann halt noch für Z ein "+1" machen. (Muß man aber nicht, Werte < 0 werden sonst einfach nicht berücksichtigt und erhalten einfach das kleinste/erste ASCII Symbol.) Große dz Werte ( z.B. bei -12 <= dz <= 12 ), kann man auch noch geschickt durch Teilen mit z.B. 3 oder 4 zurechtstutzen.

    Wichtig ist, daß man "Z" noch umkehrt - nämlich aus hohen Z-Werte sollen "kleine" Farben/ASCIIs werden und niedrige Z-Werte sollen "helle" Farben/hohe ASCIIs erhalten. Deswegen wird  Z = Maximalwert(dz) - dz  genommen.


    ... d.h. ,


    in die "Farbauswahl" - zwischen Zeile 52 und 53 - kommt dazu


    int Z = 6 - (dz + 1);


    oder für eine Variante mit vielen Tiefenwerten von dz ( wie etwa bei einer (Zeile34) float dz = cos(A/7) * 12 + 11 ; )


    int Z = 12 - (int) floor ( dz / 2 );




    und, die eigentliche "Farbauswahl" ändert sich zu


    Zeile 55 b[o] = ".,-~:;=()!*uoO&$#W@"[N+Z > 0 ? N+Z : 0];


    wobei man evtl. für "viel Tiefe" (großes Z) die Auswahl an ASCII Zeichen noch anpassen muß, im einfachsten Fall durch Verdopplung von ASCII Werten, etwas so


    Zeile 55 b[o] = "..,,--~~::;;==(())!!*uoO&$#W@"[N+Z > 0 ? N+Z : 0];






    .

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Na, so ganz schlimm ist es dann auch wieder nicht, aber es ist ja unglaublich ineinander "gestaucht". Wenn man das ganz klassisch aufschreiben würde, sähe das schonmal anders aus - und ist dann auch wesentlich verständlicher.


    Aber der Autor von dem Teil, Andy Sloane, hatte es ja eigentlich mal (2006) als eine Art Demo gebaut - um zu zeigen, wie man in C komischen Code schreiben kann.


    Hier mal noch die beiden "Erstveröffentlichungen"


    https://www.a1k0n.net/2006/09/15/obfuscated-c-donut.html


    https://www.a1k0n.net/2006/09/20/obfuscated-c-donut-2.html



    Du kannst ja mal probieren einen 2D "Donut" auf dem Pet hinzubekommen. Mit der Grafikkarte sollte das sogar schön aussehen und außerdem ist das ein Grafikklassiker, auch unbewegt und mit leidglich (x,y) ohne Beleuchtung usf. Man malt dazu einen (unsichtbaren) Kreis und darauf aller paar Grad mit dem jeweilig aktuellen (x,y) Wert als Mittelpunkt einen kleineren Kreis - bis man einmal um den großen Kreis herum ist.

    Wenn man das fertig hat, kann man anfangen statt kleinen Kreisen mal kleine Ellipsen zu malen - und schon ist man optisch nah dran.


    Kleiner Tip: im Einheitskreis gilt 1 = x2 + y2 und für Kreise mit Radius wird daraus Radius2 = x2 + y2 . Du kannst also bei bekanntem Radius zu jedem beliebigen x das passende y ausrechnen (und natürlich auch für jedes beliebige y das dazugehörige x). Außerdem ist der Sinus/Cosinus vom Drehwinkel ein wichtiges HIlfsmittel - weil sin(winkel) = y / Radius gilt, und cos(winkel) = x / Radius . Probier einfach mal ...

    ist nicht schwer. Am Besten nicht das Circle Kommando benutzen, sondern schön Einzelpixel malen - das fördert das Nachvollziehen erheblich.


    Das Drehen im Raum und auch das Beleuchten ist dann soviel anders auch nicht mehr - wenn man es in Einzelschritten macht.


    Nur - das in der gezeigten Form da so eng zusammenzupacken, das ist schon wirklich witzig - und naturgemäß dann auch nicht mehr wirklich "übersichtlich" oder gar "selbsterklärend".

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries