Mandelbrotova množina
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Mandelbrotova množina
Ahoj, zkousel tu nekdo programovat Mandelbrotovu mnozinu na arduinu?
Zkusil jsem to podle tohoto navodu http://warp.povusers.org/Mandelbrot/ jen jsem upravil vypis pixelu na muj lcd.
Sice to funguje ale neni vycentrovany, vedel by nekdo proc?
Zkusil jsem to podle tohoto navodu http://warp.povusers.org/Mandelbrot/ jen jsem upravil vypis pixelu na muj lcd.
Sice to funguje ale neni vycentrovany, vedel by nekdo proc?
https://arze.cz - ARduino Zapojení Elektronika
Re: Mandelbrotova množina
Mazec ... ale jelikož výpočet a vykreslování vypadá správně, podezříval bych právě tu úpravu. Nikdo ti asi nebude umět pomoct bez zveřejnění upraveného kódu, nebo křišťálové koule ...
Re: Mandelbrotova množina
V úpravě to nebude-
Originální kód:
upravený kód:
Jak jsem psal jediný co sem upravil je zobrazení pixelů na mim LCD
Originální kód:
Kód: Vybrat vše
double MinRe = -2.0;
double MaxRe = 1.0;
double MinIm = -1.2;
double MaxIm = MinIm+(MaxRe-MinRe)*ImageHeight/ImageWidth;
double Re_factor = (MaxRe-MinRe)/(ImageWidth-1);
double Im_factor = (MaxIm-MinIm)/(ImageHeight-1);
unsigned MaxIterations = 30;
for(unsigned y=0; y<ImageHeight; ++y)
{
double c_im = MaxIm - y*Im_factor;
for(unsigned x=0; x<ImageWidth; ++x)
{
double c_re = MinRe + x*Re_factor;
double Z_re = c_re, Z_im = c_im;
bool isInside = true;
for(unsigned n=0; n<MaxIterations; ++n)
{
double Z_re2 = Z_re*Z_re, Z_im2 = Z_im*Z_im;
if(Z_re2 + Z_im2 > 4)
{
isInside = false;
break;
}
Z_im = 2*Z_re*Z_im + c_im;
Z_re = Z_re2 - Z_im2 + c_re;
}
if(isInside) { putpixel(x, y); }
}
}
Kód: Vybrat vše
int ImageHeight = 288; //rozlišení obrazu na výšku
int ImageWidth = 480; //rozlišení obrazu na šířku
double MinRe = -2.0;
double MaxRe = 1.0; //1.0
double MinIm = -1.2; //-1.2
double MaxIm = MinIm+(MaxRe-MinRe)*ImageHeight/ImageWidth;
double Re_factor = (MaxRe-MinRe)/(ImageWidth-1);
double Im_factor = (MaxIm-MinIm)/(ImageHeight-1);
unsigned MaxIterations = 30; //počet iterací
for(unsigned y=0; y<ImageHeight; ++y)
{
double c_im = MaxIm - y*Im_factor;
for(unsigned x=0; x<ImageWidth; ++x)
{
double c_re = MinRe + x*Re_factor;
double Z_re = c_re, Z_im = c_im;
bool isInside = true;
for(unsigned n=0; n<MaxIterations; ++n)
{
double Z_re2 = Z_re*Z_re, Z_im2 = Z_im*Z_im;
if(Z_re2 + Z_im2 > 4)
{
isInside = false;
break;
}
Z_im = 2*Z_re*Z_im + c_im;
Z_re = Z_re2 - Z_im2 + c_re;
}
if(isInside)
{
delay(5); //čekej 5ms - pro zobrazovač
GPUx1 = x;
GPUy1 = y;
GPUbod(); //nakresli bod
}
}
}
https://arze.cz - ARduino Zapojení Elektronika
Re: Mandelbrotova množina
hmm .. tak tam přidej nějaký konstantní offSetX, offSetY a přičti ho k vypočtenému X a Y ... asi nejjednodužší jak to celé posunout.
Kód: Vybrat vše
if(isInside)
{
delay(5); //čekej 5ms - pro zobrazovač
GPUx1 = x + offSetX;
GPUy1 = y + offSetY;
GPUbod(); //nakresli bod
}
- SkullKeep
- Příspěvky: 292
- Registrován: 23 srp 2017, 18:51
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: Mandelbrotova množina
Zkusil si prohodit hodnoty šířky a délky obrazovky? Přijde mi jakoby byly prohozeny.
P. Q. M.
Re: Mandelbrotova množina
Dobrej postřeh
Re: Mandelbrotova množina
zkusil, pak to je eště horší
https://arze.cz - ARduino Zapojení Elektronika
Re: Mandelbrotova množina
takhle sice posunu obraz ale stejně mu bude kus chybět..kiRRow píše: ↑05 črc 2023, 10:18hmm .. tak tam přidej nějaký konstantní offSetX, offSetY a přičti ho k vypočtenému X a Y ... asi nejjednodužší jak to celé posunout.Kód: Vybrat vše
if(isInside) { delay(5); //čekej 5ms - pro zobrazovač GPUx1 = x + offSetX; GPUy1 = y + offSetY; GPUbod(); //nakresli bod }
https://arze.cz - ARduino Zapojení Elektronika
Re: Mandelbrotova množina
Na tohle jsem asi ve škole chyběl, ale když koukám na to, jak by to mělo vypadat, tak se mi zdá, že je to symetrické podle reálné osy.
Takže na imaginární ose bych tak nějak předpokládal stejné minimum a maximum (s opačnými znaménky).
Když je v programu napevno zadané...
... tak proč se potom vypočítává maximum imaginární osy 'MaxIm' ze šířky a výšky obrazovky a koncových bodů reálné osy?
Po výpočtu to vychází:
MaxIm = +0.6
A od tohodle je pak všechno ujetý kus nahoru.
Já bych zkusil tu hodnotu 'MaxIm' nastavit taky napevno:
Takže na imaginární ose bych tak nějak předpokládal stejné minimum a maximum (s opačnými znaménky).
Když je v programu napevno zadané...
Kód: Vybrat vše
double MinIm = -1.2;
Kód: Vybrat vše
double MaxIm = MinIm+(MaxRe-MinRe)*ImageHeight/ImageWidth;
MaxIm = +0.6
A od tohodle je pak všechno ujetý kus nahoru.
Já bych zkusil tu hodnotu 'MaxIm' nastavit taky napevno:
Kód: Vybrat vše
double MaxIm = 1.2;
Re: Mandelbrotova množina
Supr. To bylo ono. Já se v tom taky nevyznam tak sem se v tom nechtěl moc hrabatAstroMiK píše: ↑05 črc 2023, 14:59Na tohle jsem asi ve škole chyběl, ale když koukám na to, jak by to mělo vypadat, tak se mi zdá, že je to symetrické podle reálné osy.
Takže na imaginární ose bych tak nějak předpokládal stejné minimum a maximum (s opačnými znaménky).
Když je v programu napevno zadané...... tak proč se potom vypočítává maximum imaginární osy 'MaxIm' ze šířky a výšky obrazovky a koncových bodů reálné osy?Kód: Vybrat vše
double MinIm = -1.2;
Po výpočtu to vychází:Kód: Vybrat vše
double MaxIm = MinIm+(MaxRe-MinRe)*ImageHeight/ImageWidth;
MaxIm = +0.6
A od tohodle je pak všechno ujetý kus nahoru.
Já bych zkusil tu hodnotu 'MaxIm' nastavit taky napevno:Kód: Vybrat vše
double MaxIm = 1.2;
Díky
https://arze.cz - ARduino Zapojení Elektronika
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 5 hostů