Font
[thread]4645[/thread]

BwInf Aufgabe Flitz mit Tk möglich?: graFische Modellierung eines Teichs



<< >> 3 entries, 1 page
DS
 2003-09-06 01:21
#43030 #43030
User since
2003-08-04
247 articles
BenutzerIn
[default_avatar]
Hallo Leute,

der Titel sagt eigentlich schon das meiste aus... ich hab' heute die Aufgaben für den 22. BwInf bekommen, und mir die mal ein bisserl angeschaut... bei der 4. Aufgabe kam dann das große "Arg!": grafische Modellierung eines Teichs mit Fischen drin, die Fische sollen durch Kreise in verschiedenen Farben modelliert werden, d.h. das hört sich jetzt nicht mal sooo aufwendig an... blöd' ist nur, daß ich etwas derartiges noch nie gemacht hab' und auch noch nie (jetzt bitte nicht haun) Tk oder ähnliches hergenommen hab', aber da ich nunmal - wenn's nur irgendwie möglich ist - Alles mit Perl programmieren möchte, müßte ich zu diesem Zwecke eine der graphischen Oberflächen verwenden, die einem unter Perl zur Verfügung stehen...

Meine Frage: Ist mein Vorhaben zum Scheitern verurteilt, oder hab' ich 'ne Chance, mit 'ner Perl-GUI sagen wir mal 100 Fische mit 30fps zu "rendern"? (Wenn nicht, dann müßte ich das in VB programmieren, und darauf hab' ich jetzt nach 2 Jahren Abstinenz nicht wirklich Lust, das versteht ihr sicher...)

Dann hoff' ich mal...
Dubu
 2003-09-06 03:37
#43031 #43031
User since
2003-08-04
2145 articles
ModeratorIn + EditorIn

user image
Hier mal ein Code zum Testen (und vielleicht als Grundgeruest fuer dein Programm ;)).
Der macht auf meinem Rechner (Athlon XP 2000+, Linux 2.4.20) knapp 180 fps bei 100 Fischen gleichzeitig. Jetzt kommt's noch darauf an, wie kompliziert deine Berechnungen in jedem Schritt sind.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/perl
# fische.pl - kleines Testprogramm fuer Bewegungen im Tk::Canvas
#
# dubu -at- perl-community.de   06-Sep-2003

use strict;
use warnings;
use Tk;
use Time::HiRes;

my $FischZahl = 100;
my $CanvasWidth = 400;
my $CanvasHeight = 300;
my $FischRadius = 3;

# MainWindow und Canvas anlegen
my $Mw = MainWindow->new (-title => 'Fische');
my $Canvas = $Mw->Canvas (-width => $CanvasWidth,
    -height => $CanvasHeight,
)->pack;

# Fische anlegen
my @Fische;
for (1 .. $FischZahl) {
    # Startposition
    my $x = int (rand $CanvasWidth);
    my $y = int (rand $CanvasHeight);

    # Delta-Bewegungen (+1/0/-1 Pixel)
    my ($dx, $dy);
    do {
        $dx = int(rand 3) - 1;
        $dy = int(rand 3) - 1;
    } while $dx == 0 && $dy == 0; # nicht stillstehen!

    # Farbe des Fisches
    my $color = '#' . sprintf ("%06X", int rand 0x1000000);

    # Neuen Fisch im Canvas anlegen
    my $item = $Canvas->createOval (
        $x-$FischRadius, $y-$FischRadius,
        $x+$FischRadius, $y+$FischRadius,
        -fill => $color,
    );

    # Neuen Fisch merken
    push @Fische, {
        x => $x,
        y => $y,
        dx => $dx,
        dy => $dy,
        item => $item,
    };
}

# Zaehler und Zeit zuruecksetzen
my $cnt = 0;
my $time = Time::HiRes::time();

# Fische schwimmen lassen :-)
while (1) {
    for (@Fische) {
        $Canvas->move ($_->{item}, $_->{dx}, $_->{dy});

        # Position mitfuehren (schneller als aus Canvas)
        $_->{x} += $_->{dx};
        $_->{y} += $_->{dy};

        # Am Rand Bewegung umkehren
        $_->{dx} = -$_->{dx} if $_->{x} < 0 || $_->{x} > $CanvasWidth;
        $_->{dy} = -$_->{dy} if $_->{y} < 0 || $_->{y} > $CanvasHeight;
    }
    # Grafik-Update "manuell" durchfuehren
    $Mw->update;

    # Alle 500 Schritte Geschwindigkeit ausrechnen
    ++$cnt;
    if ($cnt == 500) {
        my $newtime = Time::HiRes::time();
        printf "%5d fps\n", $cnt/($newtime-$time);
        $time = $newtime;
        $cnt = 0;
    }
}

# ENDE
DS
 2003-09-06 04:12
#43032 #43032
User since
2003-08-04
247 articles
BenutzerIn
[default_avatar]
Wow, vielen Dank... ich denk' mal das wird mir als Tk-Neuling eine große Hilfe sein... danke!
<< >> 3 entries, 1 page



View all threads created 2003-09-06 01:21.