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


Anmelden zum Antworten