Seite 1 von 1

Hypnose-Spirale

Verfasst: Donnerstag 15. September 2005, 16:05
von mawe
Hi!

Mal wieder ein ganz wichtiges und brauchbares Snippet :D
WARNUNG: Nicht zu lange zusehen, kann zu Verblödung führen (Ihr wollt doch nicht so werden wie ich, oder?) :D

Code: Alles auswählen

from Tkinter import *
import math
import time

def create_spiral(x,y):
    res = [(x,y)]
    while len(res) <= 500:
        r = math.hypot(x,y) + 0.4
        a = math.atan2(y,x) + 0.2
        x = r * math.cos(a)
        y = r * math.sin(a)
        res.append((x,y))
    c.create_line(res, width=3, tags="line")

def rotate(x0,y0,d):
    coords = []
    old = c.coords("line")
    for i in range(0,len(old),2):
        x,y = old[i], old[i+1]
        r = math.hypot(y-y0, x-x0)
        a = math.atan2(y-y0, x-x0) + d
        x = x0 + r*math.cos(a)
        y = y0 + r*math.sin(a)
        coords.append((x,y))
    c.delete("line")
    c.create_line(coords, width=3, tags="line")

root = Tk()
c = Canvas(width=400, height=400)
c.pack()
create_spiral(0,0)
c.config(scrollregion=c.bbox(ALL))

while 1:
    rotate(0,0,0.1)
    root.update()
    time.sleep(0.01)

root.mainloop()
PS: Das ist nicht wirklich von mir, nur eine (fast 1:1) Übersetzung eines TCL Scripts.

Gruß, hypnotischer mawe

mhhh

Verfasst: Dienstag 9. September 2008, 21:29
von Rootmentor
wie lange braucht man ca. um sowas zu programmieren?

Re: mhhh

Verfasst: Dienstag 9. September 2008, 22:41
von veers
Rootmentor hat geschrieben:wie lange braucht man ca. um sowas zu programmieren?
Mindestens eine Minute. Alles andere ist abhängig von deinem können ;)

Re: mhhh

Verfasst: Dienstag 9. September 2008, 23:11
von Leonidas
veers hat geschrieben:Mindestens eine Minute.
Vierzig Zeilen in einer Minute? Da muss man ja sehr schnell tippen und einen sehr guten Editor haben.

Verfasst: Dienstag 9. September 2008, 23:23
von zerghase
Deswegen ist die Aussage ja auch genauso korrekt wie "mindestens eine Sekunde"...

Lustiges Programm... mit Antialiasing wärs aber noch schöner. Kann das tkinter überhaupt?

Re: mhhh

Verfasst: Dienstag 9. September 2008, 23:29
von veers
Leonidas hat geschrieben:
veers hat geschrieben:Mindestens eine Minute.
Vierzig Zeilen in einer Minute? Da muss man ja sehr schnell tippen und einen sehr guten Editor haben.
873 bytes -> ~15 Zeichen pro Sekunde, müsste knapp möglich sein ;)

Verfasst: Mittwoch 10. September 2008, 05:53
von BlackJack
Ich hab's mal überarbeitet (Sternchen-Import beseitigt, kein Code auf Modulebene, usw.):

Code: Alles auswählen

import math
import time
import Tkinter as tk


def create_spiral(canvas, x, y, line_width=3):
    coords = [(x, y)]
    for dummy in xrange(500):
        r = math.hypot(x, y) + 0.4
        a = math.atan2(y, x) + 0.2
        x = r * math.cos(a)
        y = r * math.sin(a)
        coords.append((x, y))
    return canvas.create_line(coords, width=line_width)


def rotate(canvas, line, x0, y0, d):
    coords = list()
    old = canvas.coords(line)
    for i in range(0, len(old), 2):
        x, y = old[i] - x0, old[i + 1] - y0
        r = math.hypot(y, x)
        a = math.atan2(y, x) + d
        coords.append(x0 + r * math.cos(a))
        coords.append(y0 + r * math.sin(a))
    canvas.coords(line, *coords)


def main():
    root = tk.Tk()
    canvas = tk.Canvas(width=400, height=400)
    canvas.pack()
    spiral = create_spiral(canvas, 0, 0)
    canvas.config(scrollregion=canvas.bbox(tk.ALL))
    
    while True:
        rotate(canvas, spiral, 0, 0, 0.1)
        root.update()
        time.sleep(0.01)


if __name__ == '__main__':
    main()

Re: mhhh

Verfasst: Mittwoch 10. September 2008, 11:01
von wuf
Hallo mave

Ein super Code-Snippet wo du hier präsentierst! Gratuliere!
Rootmentor hat geschrieben:wie lange braucht man ca. um sowas zu programmieren?
Mindestens 1 Minute plus ein Tages- oder mehrtägiges Mathematik-Studium. Und last but not least Tkinter-Insider Know How :lol:

Gruss wuf :wink:

Verfasst: Donnerstag 11. September 2008, 18:06
von Leonidas
PyGTK-Version (benötigt gnomecanvas - also auch gnome-python). Hat etwas länger gedauert, da gnomecanvas grottig dokumentiert ist. Vielleicht wird es ja mal ersetzt.

2005 Zeichen, bei 15 Zeichen pro Sekunde dauert es etwas mehr als zwei Minuten (134 Sekunden) um das zu schreiben. Alternativ auch eine Minute wenn man sich etwas zusammenreist und ~34 Zeichen pro Sekunde schreibt. :twisted:

Verfasst: Donnerstag 11. September 2008, 19:40
von veers
Mit Pyglet/OpenGL, Framerate unabhängig und Vollbild, hat knappe 20 Minuten gedauert :)

http://paste.pocoo.org/show/85027/ 756 bytes ;)

Verfasst: Samstag 20. September 2008, 13:45
von lunar
Ist zwar schon etwas älter, aber ich poste jetzt trotzdem noch meine Qt4 Version:
http://paste.pocoo.org/show/85761/