User since
2003-08-04
247
Artikel
BenutzerIn
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...
User since
2003-08-04
2145
Artikel
ModeratorIn + EditorIn
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.
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
use strict;
use warnings;
use Tk;
use Time::HiRes;
my $FischZahl = 100;
my $CanvasWidth = 400;
my $CanvasHeight = 300;
my $FischRadius = 3;
my $Mw = MainWindow->new (-title => 'Fische');
my $Canvas = $Mw->Canvas (-width => $CanvasWidth,
-height => $CanvasHeight,
)->pack;
my @Fische;
for (1 .. $FischZahl) {
my $x = int (rand $CanvasWidth);
my $y = int (rand $CanvasHeight);
my ($dx, $dy);
do {
$dx = int(rand 3) - 1;
$dy = int(rand 3) - 1;
} while $dx == 0 && $dy == 0;
my $color = '#' . sprintf ("%06X", int rand 0x1000000);
my $item = $Canvas->createOval (
$x-$FischRadius, $y-$FischRadius,
$x+$FischRadius, $y+$FischRadius,
-fill => $color,
);
push @Fische, {
x => $x,
y => $y,
dx => $dx,
dy => $dy,
item => $item,
};
}
my $cnt = 0;
my $time = Time::HiRes::time();
while (1) {
for (@Fische) {
$Canvas->move ($_->{item}, $_->{dx}, $_->{dy});
$_->{x} += $_->{dx};
$_->{y} += $_->{dy};
$_->{dx} = -$_->{dx} if $_->{x} < 0 || $_->{x} > $CanvasWidth;
$_->{dy} = -$_->{dy} if $_->{y} < 0 || $_->{y} > $CanvasHeight;
}
$Mw->update;
++$cnt;
if ($cnt == 500) {
my $newtime = Time::HiRes::time();
printf "%5d fps\n", $cnt/($newtime-$time);
$time = $newtime;
$cnt = 0;
}
}
User since
2003-08-04
247
Artikel
BenutzerIn
Wow, vielen Dank... ich denk' mal das wird mir als Tk-Neuling eine große Hilfe sein... danke!