3D-Zeichnen mit pygame

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
abgdf

Hallo,

mein Skript heute malt mit pygame / SDL ein hübsches 3D-Muster ("Gauß'sche Normalverteilung") auf den Bildschirm. Beenden mit "q":

Code: Alles auswählen

#!/usr/bin/python

import pygame, sys,os
import math
from pygame.locals import * 
 
pygame.display.init()
 
# Anzahl Bildschirmpunkte:

RESX = 1024
RESY = 768

# RESX = 800
# RESY = 600

window = pygame.display.set_mode((RESX, RESY))

pygame.display.set_caption('Normalverteilung') 
screen = pygame.display.get_surface() 

b = 0.3
ULIM = 100.
UDIV = 1.8

for u in range(0, int(ULIM), 1):
    # Voll krass Mathe, Alder:
    a = float(u) / (ULIM / UDIV)
    if u > ULIM / 2:
        a = UDIV - (float(u) / (ULIM / UDIV))
    m = u / 16.

    for x in range(50, RESX - 50):
        c = x / (RESX / 16.) - 5.
        y = a * math.exp(-b * (c - m) * (c - m))

        # Nach unten:
        y = RESY / 10 + (y * RESY / 1.5 + u * 3)

        # Nach oben:
        # y = RESY * 9 / 10 - (y * RESY / 1.5 + u * 3)

        pygame.draw.line(screen, (200,200,200), (x, y), (x, y), 1)


pygame.display.update() 

 
def input(events): 
   for event in events: 
      if str(event).find("'key': 113,") != -1 or event.type == QUIT:
         sys.exit(0) 
 
while True: 
   input(pygame.event.get())
Könnt ihr noch schönere Muster zeichnen (lassen) ?

Viele Grüße
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Kannst du auch einen Screenshot posten?

Ich kann dir die verteilung von Primzahlen posten wenn du magst. Alternativ auch eine stilisierte Sinuskurve, also beides Dinge von recht geringem künstlerischen Niveau 8)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
abgdf

Kannst du auch einen Screenshot posten?
Gern. Den Screenshot erhält man mit

Code: Alles auswählen

wget -c http://www.angelfire.com/linux/tux25/pygauss.png
(Man muß "wget" benutzen, weil man auf dem Server Grafiken nicht direkt ansteuern kann.)

Viele Grüße
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

abgdf hat geschrieben: (Man muß "wget" benutzen, weil man auf dem Server Grafiken nicht direkt ansteuern kann.)
Das halt ich für ein Gerücht... :P
mfg

Thomas :-)
abgdf

Ist ja irre: Das geht auch in ZX Spectrum-Basic:

Code: Alles auswählen

wget -c http://www.angelfire.com/linux/tux25/specscr.png
wget -c http://www.angelfire.com/linux/tux25/speccode.png
:P

Viele Grüße
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dann werf ich auch noch mal die Primzahlen-Verteilung ein:
Bild

Die Ausgabe deines Programme ist cool, allerdings würde ich def input umbenennen und es auch sonst in Funktionen aufteilen. Die locals würde ich auch nicht per *-Import reinziehen, ich schmeiss das immer in den `pyl`-Namespace.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
abgdf

Die Ausgabe deines Programme ist cool,
Dankeschön !
Bei Deinem Bild müßte man wohl noch genauer wissen, was es mathematisch darstellt, um die Schönheit besser würdigen zu können ...
Wie man solche Bilder plotten läßt, war für mich ein altes Programmierrätsel, dem ich erst jetzt langsam auf die Spur komme.
Die Rechner früher, selbst 8-bit-Rechner, konnten das zwar (s.o.), aber ich wußte nie, wie. Sah damals wie Zauberei aus.
Eines Tages möchte ich z.B. so ein Bild von einem eigenen Python-Skript berechnen lassen:

http://www.linux-magazin.de/Artikel/aus ... ample0.gif

von

http://www.linux-magazin.de/Artikel/aus ... gauss.html

Viele Grüße
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

abgdf hat geschrieben:Bei Deinem Bild müßte man wohl noch genauer wissen, was es mathematisch darstellt, um die Schönheit besser würdigen zu können ...
Dann löse ich mal auf: Jeder der Pixel ist eine Zahl, von 0 oben links bis X-Auflösung mal Y-Auflösung unten rechts, diese Zahlen sind hintereinander aufgereiht, und nun sind sie verschieden eingefärbt: schwarz für prim, weiß für nicht-prim. Es hat Spaß gemacht einen ausreichend schnellen Algorithmus zu finden und es hat Spaß gemacht, den Code so zu optimieren, dass es nicht Stunden fürs Ausrechnen und Anzeigen gebraucht hat.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Leonidas hat geschrieben: Dann löse ich mal auf: Jeder der Pixel ist eine Zahl, von 0 oben links bis X-Auflösung mal Y-Auflösung unten rechts, diese Zahlen sind hintereinander aufgereiht, und nun sind sie verschieden eingefärbt: schwarz für prim, weiß für nicht-prim. Es hat Spaß gemacht einen ausreichend schnellen Algorithmus zu finden und es hat Spaß gemacht, den Code so zu optimieren, dass es nicht Stunden fürs Ausrechnen und Anzeigen gebraucht hat.
Um das ganze übersichtlicher zu machen, hättest du die geraden Primzahlen blau und die ungeraden rot einfärben können. ;)
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

birkenfeld hat geschrieben:Um das ganze übersichtlicher zu machen, hättest du die geraden Primzahlen blau und die ungeraden rot einfärben können. ;)
Vor allem die blauen Punkte wären sicher sehenswert gewesen 8)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Crush
User
Beiträge: 44
Registriert: Montag 1. Mai 2006, 11:32

hallo

Dieses Bild ist zwar auch keine "3D"-Zeichnung, aber ich finde die Ausgabe trotzdem interessant. Es handelt sich um die grafische Darstellung des Nagel-Schreckenberg-Modells (http://de.wikipedia.org/wiki/Nagel-Schreckenberg-Modell).

Gruss Crush

Bild

edit: noch was grafisches, das ich mal gemacht habe: http://www.python-forum.de/viewtopic.php?p=46287 -- jedoch auch hier wieder nur 2D...
Zuletzt geändert von Crush am Sonntag 3. Dezember 2006, 13:29, insgesamt 1-mal geändert.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Ich mag Grafiken :)
Könntet ihr auch den Code posten, mit dem ihr die erstellt habt?

Gruß, mawe
Crush
User
Beiträge: 44
Registriert: Montag 1. Mai 2006, 11:32

Hi mawe

klar:
ca.py
[Edit: Code ins LodgeIt ausgelagert]

plot.py
[Edit: Code ins LodgeIt ausgelagert]


Das habe ich vor etwa zwei Tagen geschrieben für eine kleine Arbeit über Zelluläre Automaten, es ist jedoch noch lange nicht "fertig". Daher auch nicht wirklich dokumentiert und einiges ist auch noch fest einprogrammiert und wenig dynamisch... Werde ich aber (wohl ab nächster Woche) noch verbessern und erweitern.

Zuerst muss man die Datei ca.py ausführen und erhält als Ausgabe eine Datei namens 'data.txt'. Führ man dann die Datei plot.py aus, erhält man ein Bild 'foo.png'.

abgdf: Will dir da den Thread nicht besudeln... Falls dir das zu Off-Topic ist, sag bitte Bescheid, dann werd' ich meinen Kram irgendwo anders posten.

Crush

Edit (Leonidas): Code ins LodgeIt ausgelagert.
abgdf

Falls dir das zu Off-Topic ist
Nee, ist doch super. Klasse Bild !

Viele Grüße
thelittlebug
User
Beiträge: 188
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Leonidas hat geschrieben:Dann werf ich auch noch mal die Primzahlen-Verteilung ein:

Die Ausgabe deines Programme ist cool, allerdings würde ich def input umbenennen und es auch sonst in Funktionen aufteilen. Die locals würde ich auch nicht per *-Import reinziehen, ich schmeiss das immer in den `pyl`-Namespace.
sieht wie ein defekter grafikkartenram aus, dazu gleich ne aufgabe: modifizieren sie den hauptspeicher ihrer grafikkarte dahingehend eine ausreichend schnelle lösung für alle in den ram passender primzahlen zu erhalten.

lgherby

€: hab unabsichtlich das bild mitge"quote"d
Crush
User
Beiträge: 44
Registriert: Montag 1. Mai 2006, 11:32

Ich beschäftige mich momentan mit Optimierungsalgorithmen (Stichwort: Travelling Salesman Problem, http://en.wikipedia.org/wiki/Travelling ... an_problem) und schreibe dazu in Python und pygame einige Beispiele zur Veranschaulichung. Heute kam dabei sowas heraus, ich hoffe es gefällt :wink: : http://claude.nouk.ch/screenshot.png

Wenn man das ganze laufen lässt, sieht man, wie die Route langsam aber sicher optimaler wird, bis irgendwann keine kürzeren Wege gefunden werden. Ich habe heute aber nicht wirklich "schönen" Code geschrieben (und das ganze steht sowieso noch im Anfagsstadium), daher poste ich momentan noch keinen Code. Falls das jemand interessiert, kann ich das ganze aber in den nächsten Wochen mal zeigen. :)

Gruss Crush
Antworten