Plasmawolke Rekursion
-
Also danke erstmal für eure Hilfen ich habe das Programm nach einigem
Hin und Her hinbekommen.# include <stdio.h> # include <stdlib.h> # include <time.h> # define Länge 129 //Um die Matrixgrösse zu ändern //muss nur die Länge geändert werden void Berechnung_Matrix (double Plasmawolke [][Länge],int xa, int xe, int ya, int ye) { int ym,xm; double Phi; Phi= (double)(rand())/(RAND_MAX); if (xe-xa>=2) { xm=((xe-xa)/2)+xa; ym=((ye-ya)/2)+ya; Plasmawolke[xa][ym]=(Plasmawolke[xa][ya]+Plasmawolke[xa][ye])/2; Plasmawolke[xm][ye]=(Plasmawolke[xa][ye]+Plasmawolke[xe][ye])/2; Plasmawolke[xe][ym]=(Plasmawolke[xe][ya]+Plasmawolke[xe][ye])/2; Plasmawolke[xm][ya]=(Plasmawolke[xa][ya]+Plasmawolke[xe][ya])/2; Plasmawolke[xm][ym]=((Plasmawolke[xa][ye]+Plasmawolke[xa][ye]+Plasmawolke[xe][ya]+Plasmawolke[xe][ya])/4)+Phi; Berechnung_Matrix(Plasmawolke,xa,xm,ya,ym); Berechnung_Matrix(Plasmawolke,xm,xe,ya,ym); Berechnung_Matrix(Plasmawolke,xa,xm,ym,ye); Berechnung_Matrix(Plasmawolke,xm,xe,ym,ye); } // xa=Anfang vom Fled (oben links) xa=ya------xm----------xe // xm=Mitte vom Feld (oben mittig) | | // xe=Ende vom Feld (oben rechts) ym--------Feld5-----Feld4+xe // ya=Anfang vom Fled (oben links) | | // ym=Mitte vom Feld (links mittig) ye-------Feld4+ye-----Feld4 // ye=Ende vom Feld (links unten) } int main () { int x,y; int Zufallszahl_1_3,I_MIN=0,I_MAX=3; //Zufallszahl 1-3 double xa=0,xe=Länge,ye=0,Feld4=Länge; double Feld5,Phi; //Felder deffinieren double Plasmawolke[Länge][Länge]; srand ((unsigned)time(NULL)); FILE*Datei; Datei=fopen("Plasmawolke.m","w"); printf_s("Dieses Programm gibt eine Plasmawolke von %dX%d Feldern aus.\n",Länge,Länge); //Programm Name bzw. Funktion Zufallszahl_1_3=rand()%(I_MAX)-(I_MIN-1); //printf("%d\n",Zufallszahl_1_3); //Test Zufallszahl xa=((double)(rand())/(double)(RAND_MAX))+Zufallszahl_1_3; Plasmawolke[0][0]=xa; xe=((double)(rand())/(double)(RAND_MAX))+Zufallszahl_1_3; Plasmawolke[0][Länge-1]=xe; ye=((double)(rand())/(double)(RAND_MAX))+Zufallszahl_1_3; Plasmawolke[Länge-1][0]=ye; Feld4=((double)(rand())/(double)(RAND_MAX))+Zufallszahl_1_3; Plasmawolke[Länge-1][Länge-1]=Feld4; Berechnung_Matrix (Plasmawolke,0,Länge-1,0,Länge-1); for (x=0;x<Länge;x++) { for (y=0;y<Länge;y++) { printf("%.3f ",Plasmawolke[x][y]); //Matrix Ausgabe fprintf(Datei,"%.3f ",Plasmawolke[x][y]); } printf("\n"); fprintf(Datei,"\n"); } fclose(Datei); //printf_s("%.3f\n",Phi); //Test Phi }
LG
86Fireblade86
-
Wozu ist denn das Zufallszahl_1_3 da ?
86fireblade86 schrieb:
Plasma-Wolke:
Starten Sie mit einem Quadrat und zufälligen Intensitätswerten ci an den Ecken Ei,
1 <= i <= 4 und 0 < ci <= 1.Deine Intensität in den Ecken soll zwischen 0 und 1 liegen. Da machst du dir mit dem Zufallszahl_1_3 als Offset aber kaputt.
-
Ja, aber in diesem Fall wollte ich eine Zufallszahl zwischen 1 und 3
um die Darstellung in Matlab ein bisschen zu verändern, desshalb habe ich zu meiner Zufallszahl zwischen 0 und 1 noch eine zwischen 1 und 3 dazu addiert.
LG
86Fireblade86
-
Im Sinne einer guten Zufallsverteilung solltest du möglichst auf 2-Vielfache als Bereich eingrenzen, also
rand() % 2 rand() % 4 ... (rand() % 2) +1 (rand() % 4) +1 ...
Außerdem sind deutsche Umlaute in Bezeichnern ('Länge') nicht erlaubt.
-
@ Wutz
Also bei mir hat er den Bezeichner genommen ohne zu meckern, hat mich zwar auch gewundert aber naja.
LG
86Fireblade86