Stránka 1 z 1
					
				Mandelbrotova množina
				Napsal: 04 črc 2023, 17:53
				od Diego
				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?
 
			 
			
					
				Re: Mandelbrotova množina
				Napsal: 04 črc 2023, 20:20
				od kiRRow
				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
				Napsal: 05 črc 2023, 06:21
				od Diego
				V úpravě to nebude-
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); }
    }
}
upravený kód:
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
              }
          }
      }
Jak jsem psal jediný co sem upravil je zobrazení pixelů na mim LCD
 
			 
			
					
				Re: Mandelbrotova množina
				Napsal: 05 črc 2023, 10:18
				od kiRRow
				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
              }
 
			 
			
					
				Re: Mandelbrotova množina
				Napsal: 05 črc 2023, 10:21
				od SkullKeep
				Zkusil si prohodit hodnoty šířky a délky obrazovky?  Přijde mi jakoby byly prohozeny.
			 
			
					
				Re: Mandelbrotova množina
				Napsal: 05 črc 2023, 10:35
				od kiRRow
				Dobrej postřeh  

 
			 
			
					
				Re: Mandelbrotova množina
				Napsal: 05 črc 2023, 13:04
				od Diego
				SkullKeep píše: ↑05 črc 2023, 10:21
Zkusil si prohodit hodnoty šířky a délky obrazovky?  Přijde mi jakoby byly prohozeny.
 
zkusil, pak to je eště horší
 
			 
			
					
				Re: Mandelbrotova množina
				Napsal: 05 črc 2023, 13:15
				od Diego
				kiRRow píše: ↑05 črc 2023, 10:18
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
              }
 
 
takhle sice posunu obraz ale stejně mu bude kus chybět..
 
			 
			
					
				Re: Mandelbrotova množina
				Napsal: 05 črc 2023, 14:59
				od AstroMiK
				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?
Kód: Vybrat vše
double MaxIm = MinIm+(MaxRe-MinRe)*ImageHeight/ImageWidth;
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:
 
			 
			
					
				Re: Mandelbrotova množina
				Napsal: 05 črc 2023, 18:26
				od Diego
				AstroMiK píše: ↑05 črc 2023, 14:59
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?
Kód: Vybrat vše
double MaxIm = MinIm+(MaxRe-MinRe)*ImageHeight/ImageWidth;
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:
 
Supr. To bylo ono. Já se v tom taky nevyznam tak sem se v tom nechtěl moc hrabat 

Díky