3D-Zeichnen mit pygame

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

3D-Zeichnen mit pygame

Beitragvon abgdf » Dienstag 28. November 2006, 23:32

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

Beitragvon Leonidas » Mittwoch 29. November 2006, 00:26

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 Modvoice
abgdf

Beitragvon abgdf » Mittwoch 29. November 2006, 21:23

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

Beitragvon Python 47 » Mittwoch 29. November 2006, 21:29

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

Beitragvon abgdf » Donnerstag 30. November 2006, 01:33

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

Beitragvon Leonidas » Donnerstag 30. November 2006, 13:47

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 Modvoice
abgdf

Beitragvon abgdf » Samstag 2. Dezember 2006, 22:15

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

Beitragvon Leonidas » Samstag 2. Dezember 2006, 22:25

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 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

Beitragvon birkenfeld » Samstag 2. Dezember 2006, 23:33

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

Beitragvon Leonidas » Sonntag 3. Dezember 2006, 00:11

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 Modvoice
Crush
User
Beiträge: 44
Registriert: Montag 1. Mai 2006, 11:32

Beitragvon Crush » Sonntag 3. Dezember 2006, 09:23

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])

Beitragvon mawe » Sonntag 3. Dezember 2006, 10:20

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

Beitragvon Crush » Sonntag 3. Dezember 2006, 11:00

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

Beitragvon abgdf » Sonntag 3. Dezember 2006, 18:15

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:

Beitragvon thelittlebug » Freitag 6. April 2007, 19:03

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder