Paproć Barnsleya

0

Witam znalazłem takie zadanie:
https://scr.hu/l0q6aR
I zrobiłem je tak:

 #include <iostream>
#include <string>
#include <fstream>
#include <time.h>
using namespace std;

struct s{
	float px=0;
	float py=0;
};
void paproc(s*pkt, const string &filename, const int &n);

int main()
{
	const int n = 10000;
	s punkt;
	punkt.px = 0;
	punkt.py = 0;
	srand(time(NULL));
	const string filename = "plik.txt";
	paproc(&punkt, filename, n);
}

void paproc(s*pkt, const string &filename,const int &n)
{
	fstream plik;
	plik.open(filename, ios::out);
	s*tmp;
	tmp = new s;
	tmp->px = pkt->px;
	tmp->py = pkt->py;
	int i = 0;
	plik << "Paproc" << endl << pkt->px << " " << pkt->py << endl;
	for (int j = 0; j < n; ++j)
	{
		i = rand() % 100;
		if (i < 85)
		{
			pkt->px = 0.85*tmp->px + 0.04*tmp->py;
			pkt->py = -0.04*tmp->px + 0.85*tmp->py + 1.6;
		}
		else if ((i >= 85) && (i < 92))
		{
			pkt->px = -0.15*tmp->px + 0, 28 * tmp->py;
			pkt->py = 0.26*tmp->px + 0.24*tmp->py + 0.44;
		}
		else if ((i >= 92) && (i < 99))
		{
			pkt->px = 0.20*tmp->px - 0.26*tmp->py;
			pkt->py = 0.23*tmp->px + 0.22*tmp->py + 1.6;
		}
		else
		{
			pkt->px = 0;
			pkt->py = 0.16*tmp->py;
		}
		plik << pkt->px << " " << pkt->py << endl;
	}
}



Ale coś źle te punkty się losują bo w pliku zawsze x ma 0,a y ma albo 0.44,albo 1.6 z tym ,że 1.6 znacznie częściej.Coś źle zapisałem przy działaniu na pkt?Bo ja błędu nie moge znaleźć,a moze źle go przekazałem do funkcji?

0

Chyba znalazłem bład ,sprawdzi ktoś czy dobrze myślę?Bląd był taki,że nigdy nie zmieniałem tmp.

 #include <iostream>
#include <string>
#include <fstream>
#include <time.h>
using namespace std;

struct s{
	float px;
	float py;
};
void paproc(s*pkt, const string &filename, const int &n);

int main()
{
	const int n = 10000;
	s punkt;
	punkt.px = 0;
	punkt.py = 0;
	srand(time(NULL));
	const string filename = "plik.txt";
	paproc(&punkt, filename, n);
}

void paproc(s*pkt, const string &filename,const int &n)
{
	fstream plik;
	plik.open(filename, ios::out);
	s*tmp;
	tmp = new s;
	tmp->px = pkt->px;
	tmp->py = pkt->py;
	int i = 0;
	plik << "Paproc" << endl << pkt->px << " " << pkt->py << endl;
	for (int j = 0; j < n; ++j)
	{
		i = rand() % 100;
		if (i < 85)
		{
			pkt->px = 0.85*tmp->px + 0.04*tmp->py;
			pkt->py = -0.04*tmp->px + 0.85*tmp->py + 1.6;
			tmp->px = pkt->px;
			tmp->py = pkt->py;
		}
		else if ((i >= 85) && (i < 92))
		{
			pkt->px = -0.15*tmp->px + 0, 28 * tmp->py;
			pkt->py = 0.26*tmp->px + 0.24*tmp->py + 0.44;
			tmp->px = pkt->px;
			tmp->py = pkt->py;
		}
		else if ((i >= 92) && (i < 99))
		{
			pkt->px = 0.20*tmp->px - 0.26*tmp->py;
			pkt->py = 0.23*tmp->px + 0.22*tmp->py + 1.6;
			tmp->px = pkt->px;
			tmp->py = pkt->py;
		}
		else
		{
			pkt->px = 0;
			pkt->py = 0.16*tmp->py;
			tmp->px = pkt->px;
			tmp->py = pkt->py;
		}
		plik << pkt->px << " " << pkt->py << endl;
	}
}


1 użytkowników online, w tym zalogowanych: 0, gości: 1