[java] mandelbrot tekenen, alleen zwart vlak

Pagina: 1
Acties:
  • 154 views sinds 30-01-2008
  • Reageer

  • GFoAP
  • Registratie: December 2002
  • Laatst online: 22-12-2024
Voor een schoolopdracht moet ik een mandelbrot figuurtje tekenen, heb flink zitten puzzelen maar kan mijn fout niet ontdekken. het probleem is dat ik alleen een zwart vlak krijg. Het lukt wel om dat zwarte vlak een andere kleur te geven, maar ik krijg het patroon er niet in.

Het essentiele deel van de code is volgens mij:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//Mandel getal berekenen    
    private int Mandelcalc(int x, int y)
    {
    double fa=0, fb=0,faoud=0;
    while ((fa*fa+fb*fb)<16 && (her<maxher)) // zoland de afstand tot de oorsprong kleiner of gelijk is aan het kwadraat van vier (16) wordt dit uitgevoerd
    {
    faoud = fa;
    fa = fa*fa-fb*fb+x;
    fb = 2*faoud*fb+y;
    her++;
    }
    return her;
    }
//mandel tekenen    
    public void paint(Graphics g)
    {
          
        for (y=0; y<400; y++)
        {
            for (x=0; x<400; x++)
            {   
                int mandel;
                mandel = this.Mandelcalc(x,y);
                //kleuren
                if (mandel%2==1) g.setColor(Color.white);
                if (mandel%3==2) g.setColor(Color.red);
                if (mandel%4==3) g.setColor(Color.blue);
                if (mandel%5==4) g.setColor(Color.green);
                if (mandel%6==5) g.setColor(Color.pink);
                    else g.setColor(Color.black);
                    g.fillRect(x,y,1,1);
                                    
                }
        }
     }


iemand een helpende hand, hoef niet direct de oplossing te hebben, maar in elk geval weer even een duwtje verder.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-03 14:33

NMe

Quia Ego Sic Dico.

mandel%2 kan nooit iets anders zijn dan 0 of 1.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • GFoAP
  • Registratie: December 2002
  • Laatst online: 22-12-2024
ja klopt, die fout had ik al gevonden, maar nog niet hierstaan. Nu staat het er goed, maar het werkt niet. zoals het er stond had het ook al zwat en wit moeten zijn en het was alleen zwart. alsof er altijd 0 uitkomt, maar hoe kan dat dan?

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Ik kijk in mijn glazen bol en zie:
her en maxher zijn globale variabelen. her wordt op gegeven moment gelijk aan maxher en dat is volgens mijn glazen bol 6 (of 0). her verandert vervolgens niet meer.

  • RHE123
  • Registratie: April 2003
  • Laatst online: 08-04 21:25

RHE123

Edubits

Daos schreef op woensdag 01 maart 2006 @ 21:47:
Ik kijk in mijn glazen bol en zie:
her en maxher zijn globale variabelen. her wordt op gegeven moment gelijk aan maxher en dat is volgens mijn glazen bol 6 (of 0). her verandert vervolgens niet meer.
Dit is inderdaad ook mijn idee. Je kan het morgen natuurlijk ook even op het practicum vragen, mijn medestudentassistenten willen je dan vast ook helpen >:)

(Je moet dus aan het begin van je functie MandelCalc de 'her' even resetten naar 0)

[ Voor 11% gewijzigd door RHE123 op 01-03-2006 21:56 ]

Canon 1D X + 16-35 f/2.8L + 24-70 f/2.8L + 70-200 f/2.8L IS + 135 f/2.0L + 430EX II | iMac | MacBook Pro


  • [ti]
  • Registratie: Februari 2000
  • Niet online
Naast de meldingen over her en maxher, moet je volgens mij ook de calc functie anders aanroepen. mandel = this.Mandelcalc(x,y); moet iets worden als

mandel = this.Mandelcalc( (200-x) / 200, (200-y) / 200);

ofzo...

  • RHE123
  • Registratie: April 2003
  • Laatst online: 08-04 21:25

RHE123

Edubits

[ti] schreef op woensdag 01 maart 2006 @ 22:24:
Naast de meldingen over her en maxher, moet je volgens mij ook de calc functie anders aanroepen. mandel = this.Mandelcalc(x,y); moet iets worden als

mandel = this.Mandelcalc( (200-x) / 200, (200-y) / 200);

ofzo...
Dat ligt eraan wat die x en y zijn die TS meegeeft. Als dit al 'mandelcoordinaten' zijn, zijn dit soort berekeningen dus niet meer nodig.

Canon 1D X + 16-35 f/2.8L + 24-70 f/2.8L + 70-200 f/2.8L IS + 135 f/2.0L + 430EX II | iMac | MacBook Pro


Verwijderd

RHE123 schreef op woensdag 01 maart 2006 @ 22:47:
Dat ligt eraan wat die x en y zijn die TS meegeeft. Als dit al 'mandelcoordinaten' zijn, zijn dit soort berekeningen dus niet meer nodig.
Een Mandelbrot heeft alleen 'zin' bij coordinaten grofweg tussen -2 en +2 (en -2i tot +2i). Alles daarbuiten geeft geen resultaat omdat het meteen de 'escape velocity' al bereikt heeft.

De TS gebruikt een schaal van 0..400 (pixels) en dat is dus veel te groot om iets 'zichtbaars' te krijgen. Er moet dus wel degelijk geschaald worden.

offtopic:
Overigens is '16' ook wel groot om te testen. Normaal wordt daar 4 voor gebruikt IIRC (heb zelf eens een mandelbrot movie generator geschreven met mooi boundary trace algoritme, maar da's al weer lang geleden :) )

[ Voor 20% gewijzigd door Verwijderd op 01-03-2006 22:55 ]


  • RHE123
  • Registratie: April 2003
  • Laatst online: 08-04 21:25

RHE123

Edubits

Verwijderd schreef op woensdag 01 maart 2006 @ 22:51:
[...]

Een Mandelbrot heeft alleen 'zin' bij coordinaten grofweg tussen -2 en +2 (en -2i tot +2i). Alles daarbuiten geeft geen resultaat omdat het meteen de 'escape velocity' al bereikt heeft.

De TS gebruikt een schaal van 0..400 (pixels) en dat is dus veel te groot om iets 'zichtbaars' te krijgen. Er moet dus wel degelijk geschaald worden.

offtopic:
Overigens is '16' ook wel groot om te testen. Normaal wordt daar 4 voor gebruikt IIRC (heb zelf eens een mandelbrot movie generator geschreven met mooi boundary trace algoritme, maar da's al weer lang geleden :) )
Ohja, inderdaad even overheen gekeken :7 De 16, of naja een afstand van 4 van (fa,fb) tot (0,0) is gegeven in de opdracht.

Canon 1D X + 16-35 f/2.8L + 24-70 f/2.8L + 70-200 f/2.8L IS + 135 f/2.0L + 430EX II | iMac | MacBook Pro


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16:58

.oisyn

Moderator Devschuur®

Demotivational Speaker

(jarig!)
Je kleurbepaling is ook een beetje vaag. Je doet steeds modulo een ander getal, maar als x%4 = 3, dan x%2 = 1. En dus zal de x%4=3 nooit optreden omdat je eerst met 2 controleert. Je gebruikt 6 verschillende kleuren, dus je moet gewoon modulo 6 rekenen, en dan is het resultaat ergens tussen 0 en 5 (inclusief).

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1