Hypnose-Spirale

Code-Stücke können hier veröffentlicht werden.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hypnose-Spirale

Beitragvon mawe » Donnerstag 15. September 2005, 16:05

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
Rootmentor
User
Beiträge: 54
Registriert: Sonntag 17. August 2008, 18:26
Wohnort: Lingen
Kontaktdaten:

mhhh

Beitragvon Rootmentor » Dienstag 9. September 2008, 21:29

wie lange braucht man ca. um sowas zu programmieren?
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Re: mhhh

Beitragvon veers » Dienstag 9. September 2008, 22:41

Rootmentor hat geschrieben:wie lange braucht man ca. um sowas zu programmieren?
Mindestens eine Minute. Alles andere ist abhängig von deinem können ;)
My Website - 29a.ch
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: mhhh

Beitragvon Leonidas » Dienstag 9. September 2008, 23:11

veers hat geschrieben:Mindestens eine Minute.

Vierzig Zeilen in einer Minute? Da muss man ja sehr schnell tippen und einen sehr guten Editor haben.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
zerghase
User
Beiträge: 15
Registriert: Samstag 19. November 2005, 21:15
Wohnort: München

Beitragvon zerghase » Dienstag 9. September 2008, 23:23

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?
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Re: mhhh

Beitragvon veers » Dienstag 9. September 2008, 23:29

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 ;)
My Website - 29a.ch

"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
BlackJack

Beitragvon BlackJack » Mittwoch 10. September 2008, 05:53

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()
Benutzeravatar
wuf
User
Beiträge: 1369
Registriert: Sonntag 8. Juni 2003, 09:50

Re: mhhh

Beitragvon wuf » Mittwoch 10. September 2008, 11:01

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:
Take it easy Mates!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 11. September 2008, 18:06

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:
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Beitragvon veers » Donnerstag 11. September 2008, 19:40

Mit Pyglet/OpenGL, Framerate unabhängig und Vollbild, hat knappe 20 Minuten gedauert :)

http://paste.pocoo.org/show/85027/ 756 bytes ;)
My Website - 29a.ch

"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
lunar

Beitragvon lunar » Samstag 20. September 2008, 13:45

Ist zwar schon etwas älter, aber ich poste jetzt trotzdem noch meine Qt4 Version:
http://paste.pocoo.org/show/85761/

Wer ist online?

Mitglieder in diesem Forum: snoopy48