ollowain86
Anmeldungsdatum: 2. Mai 2014
Beiträge: Zähle...
|
Hallo, ich programmiere in c/c++ (Grundkenntniss-Niveau) und gebe meine Dateien als .txt-Datei aus. Das sind dann zum Beispiel größere Arrays, also sowas wie "100 Bakterien sind auf dem Feld-Element a11 wandern mit einer Wahrscheinlichkeit auf ein Nachbarfeld oder vermehren sich".
Für die Visualisierung benutze ich "gnuplot". Doch gnuplot zeigt mir nur das Endergebnis an (plot "xy.txt" matrix with image - ist der Befehl).
Ich hätte gern etwas, was für jeden Schritt ein Bild anzeigt (z.B. aus einer for-Schleife) und ich das verfolgen kann. Kennt ihr da etwas? Ich hab mal gesehen, dass jemand in gnuplot eine Sinus hat laufen lassen, doch ich weiss nicht, ob das in meinem Fall funzt. Freue mich über Tipps! lg Ollowain Moderiert von XM-Franz: Kein Bezug zum Forum "Programme" vorhanden. Ins passende Forum verschoben.
|
noisefloor
Ehemaliger
Anmeldungsdatum: 6. Juni 2006
Beiträge: 28954
Wohnort: WW
|
Hallo, mir ist irgendwie die Frage nicht klar... Wenn du mehrere Daten in mehreren Plots darstellen willst, muss du doch einfach nur für jeden Plot die Daten entsprechend bereit stellen. "Wie" ist dabei fast egal, also ob du in einer Datei alle Daten hast, z.B. in jeder Zeile die Daten für einen Plot, oder pro Plot eine Datei. Vielleicht möchtest du mal eine Minibeispiel einer Datei hier posten, damit's klarer wird. Gruß, noisefloor
|
ollowain86
(Themenstarter)
Anmeldungsdatum: 2. Mai 2014
Beiträge: 46
|
Hi, genau so mach ich´s ja. Ich speicher für jeden Schritt die Daten ab und kann dann jeden Schritt z.B. bei gnuplot darstellen. Aber bei 1000 Schritten muss ich 1000 Datensets plotten.
Ich will erreichen, das ein Programm die 1000 Datensets der Reihenfolge nach (z.B. jede Sekunde eins: 0001.txt; 0002.txt...) zeigt, sodass ich die Entwicklung über die Zeit beobachten kann. unten allg. das Progamm: In einem 50x50 großen Feld, wird zufällig irgendwo eine Population von 100 xy gesetzt. Mit jedem Schritt existiert Wahrscheinlichkeit von 10%, dass von der Population von 100, 10 in ein Nachbarfeld wandern. ZUr restlichen Wahrscheinlichkeit von 90% wächst die Bevölkerung.
Jedes neu bevölkerte Feld kann seine Nachbarfelder bevölkern. Ich suche ein Programm, dass mir Schritt für Schritt abspielt. lg 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 | #include <iostream>
#include <armadillo>
#include <time.h>
using namespace std;
using namespace arma;
int main()
{
int i=50;
int j=50;
srand((unsigned)time(NULL));
int a = rand()%i;
int b = rand()%j;
mat A(i,j);
for (int c=0; c<i; c++)
{
for (int d=0; d<j; d++)
{
A(c,d)=0;
}
}
A(a,b)=100;
for(int z=0; z<1000; z++)
{
for (int c=0; c<i; c++)
{
for (int d=0; d<j; d++)
{
int k = rand()%3-1;
int l = rand()%3-1;
int w = rand()%10;
if(w==0 & A(c,d)>0 & c+k==i || c+k<0 || d+l==j || d+l<0)
{
A(c,d)=A(c,d);
}
if(w==0 & A(c,d)>0 & c+k<i & c+k>=0 & d+l<j & d+l>=0)
{
A(c+k,d+l)=A(c+k,d+l)+10;
A(c,d)=A(c,d)-10;
}
if(A(c,d)>0 & w>0)
{
A(c,d)=A(c,d)+10;
}
}
}
}
cout << A << endl;
}
|
Bearbeitet von rklm: Passendes Syntaxhighlighting eingestellt. Bitte demnächst selbst machen!
|
noisefloor
Ehemaliger
Anmeldungsdatum: 6. Juni 2006
Beiträge: 28954
Wohnort: WW
|
Hallo, also willst du aus Bildern einen Film erzeugen (so Daumenkino mäßig). Nicht-live ginge das z.B. wenn du ein animiertes GIF erstellst (wobei ich nicht weiß, wie viele Einzelbilder ein GIF enthalten darf. Außerdem gibt's bestimmt Programme, die aus Bilddateien eine Video machen können, wobei ich dir da gerade keins benennen kann. Gruß, noisefloor
|
Dakuan
Anmeldungsdatum: 2. November 2004
Beiträge: 6339
Wohnort: Hamburg
|
Also irgendwie erinnert mich das an Game of Life. Das hatte ich damals in Klötzchengrafik auf meinem Z80 und 50x50 könnte auf einem HD Bildschirm in der Konsole auch grad noch gehen 😉 Aber hast Du schonmal über eine Script Lösung nachgedacht? Ich habe noch nicht mit Gnuplot gearbeitet und weiss daher nicht, ob man damit Grafikdateien erzeugen kann. Dann könnte man z.B. ein Bild-Wiedergabeprogramm mit Dia Show Option zur Darstellung verwenden. Alternativ ginge auch eine Script Lösung mit "feh", das könnte besser sein, da feh sehr schnell ist (hat glaube ich auch selber eine Diashow Option).
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
Dakuan schrieb: Ich habe noch nicht mit Gnuplot gearbeitet und weiss daher nicht, ob man damit Grafikdateien erzeugen kann.
Ja, das ist der Zweck des Programms.
|
sebix
Moderator, Webteam
Anmeldungsdatum: 14. April 2009
Beiträge: 5323
|
ollowain86 schrieb: Ich will erreichen, das ein Programm die 1000 Datensets der Reihenfolge nach (z.B. jede Sekunde eins: 0001.txt; 0002.txt...) zeigt, sodass ich die Entwicklung über die Zeit beobachten kann.
Einen Film? Zum Beipspiel mit:
| avconv -i %4d.png outfile.mp4
|
Siehe dazu auch das wiki von avconv: Create video from image sequence
|
Mooi
Anmeldungsdatum: 15. August 2014
Beiträge: 187
|
Für Pixelgrafiken, wie von Gnuplot geliefert, wird eine Gif-Animation geeigneter sein. Die kann man sich einfach mit animate (ImageMagick) erstellen.
|
MaSchle.inc
Anmeldungsdatum: 16. Dezember 2006
Beiträge: 267
|
hallo ollowain ein ausbaufaehiger Vorschlag. Die Ausgabe deines Programms in eine Datei schreiben. der Dateiname ist frei erfunden.
| #include <fstream>
fstream file;
file.open("Games.dat",ios::out);
file << A << endl;
file.close();
|
Diese Zeilen habe ich in deinem Programm geaendert.
Dann in gnuplot folgendes kleines script erstellt.
| do for [spalte = 0:50]{
plot 'Games.dat' using 0:spalte
}
|
es ist auch moeglich Einzelbilder zu erstellen und wie erwaehnt eine animation zu erstellen. Die Ausgabe kann natuerlich noch verschoenert werden. Gruss Martin
|
MaSchle.inc
Anmeldungsdatum: 16. Dezember 2006
Beiträge: 267
|
Und hier die gnuplot luxusversion einfach den filenamen eintragen und schon fallen die bilder raus.
1
2
3
4
5
6
7
8
9
10
11
12
13 | FILE="Games.dat"
set terminal gif
set xrange [0:50]
set yrange[0:10000]
do for [spalte = 0:50]{
set output FILE.(sprintf("%03.0f",spalte)).'.gif'
set title FILE.spalte
plot FILE using 0:spalte title'the game '.spalte
}
|
- Bilder
|
ollowain86
(Themenstarter)
Anmeldungsdatum: 2. Mai 2014
Beiträge: 46
|
Wow danke für die Antworten!!
Ich werd gleichdie Vorschläge ausprobieren und mich melden, wenn es klappt ☺
|