Avatar billede melange Nybegynder
25. januar 2004 - 13:05 Der er 5 kommentarer og
1 løsning

Bug i fraktalprogram

Jeg har som datalogi-projekt lavet et program som kan tegne mandelbrotmængden.
Dog er der en bug som irriterer mig en del. Ideen med programmet er selvfølgelig at det skal kunne tegne en mandelbrotmængde, men åbner man det og trykker "tegn mandelbrotmængden" sker der ingenting!
Af ukendte grunde skal man nemlig først trykke "reset", og derefter "tegn" for at den begynder at tegne.

Er der nogen som kan gennemskue hvorfor ?

Det eneste som sker når man trykker reset er følgende:

Private Sub cmdReset_Click()
    txtRed = 1
    txtGreen = 5
    txtBlue = 10
    txtXmin = -1.9
    txtYmin = -1.25
    txtDelta = 2.5
End Sub

og alle disse værdier burde være tildelt som default.


PS: textboxene i  framen "akser", samt "text1" og "text2" er ligegyldige, tænk ikke over dem.

PPS: Beaklger megt at koden ikke ordenligt gennemkodet endnu

PPPS: Jeg ved godt programmet er ekstremt langsomt, men det kunne ikke blive anderledes
Avatar billede melange Nybegynder
25. januar 2004 - 13:07 #1
og så glemte jeg selvfølgeig at poste et link :)
www.dummeslag.dk/Fractalum.zip
Avatar billede kabbak Professor
25. januar 2004 - 14:10 #2
Jeg ved ikke hvorfor, men jeg ved hvordan du omgår det.
Public Sub cmdReset_Click()' lavet om til Public
    txtRed = 1
    txtGreen = 10
    txtBlue = 20
    txtXmin = -1.9
    txtYmin = -1.25
    txtDelta = 2.5
End Sub

Tilføjet
Private Sub cmdDraw_Click()
Call cmdReset_Click ' Denne linie er ny
    If TxtNumber > 1000 Or TxtNumber < 75 Then
Avatar billede kabbak Professor
25. januar 2004 - 14:55 #3
Dine tekstbokse værdier kan du ikke bruge uden du oversætter dem til tal, de står altid som tekst.

Du kan regne med dem ved  Val(txtRed)

Der hvor du plusser dem, er det tekst du plusser

Du skal bruge

If Val(txtRed)+Val(txtGreen)+Val(txtBlue) > 30 then

husk at oversætte dem andre steder også.
Avatar billede kabbak Professor
25. januar 2004 - 15:47 #4
jeg har rettet i denne, prøv at se om det virker

Private Sub cmdDraw_Click()
    If TxtNumber > 1000 Or TxtNumber < 75 Then
   
        MsgBox ("Du skal vælge et antal punkter inden for de angivne grænser (100 til 1000)!")
   
    Else
       
        If Val(txtRed) + Val(txtGreen) + Val(txtBlue) < 40 Then
       
            T1 = Timer
   
            pctFractal.ScaleWidth = Val(TxtNumber)
            pctFractal.ScaleHeight = Val(TxtNumber)
   
            ScreenWidth = pctFractal.ScaleWidth
            ScreenHeight = pctFractal.ScaleHeight
 
            xStep = Val(txtDelta) / ScreenWidth    'er lige store
            yStep = Val(txtDelta) / ScreenHeight    'er lige store
   
            'Cls                                'Fjerner alt tegnet indhold på formen (i programmet)
   
            DrawP = True                        'Tildeler DrawP værdien True

            For X = 0 To ScreenWidth            'Starter en tælleløkke for x med startværdi 0 til x bliver ScreenWidth (skærmbredden)

                For Y = 0 To ScreenHeight      ' Starter en tællelække for y INDEN I tælleløkken for x med samme betingelser som for x. Gennem kombinationen af disse to tælleløkker, bliver der regnet på hvert enkelt punkt.
           
                    p = Val(txtXmin) + X * xStep
                    q = Val(txtYmin) + Y * yStep
                   
                    xOld = 0
                    yOld = 0
                    Color = 0
           
                    While (Not (xOld ^ 2 + yOld ^ 2 > Val(txtDelta))) And Color < 255 And DrawP
                        xNew = xOld
                        yNew = yOld
               
                        xOld = xNew ^ 2 - yNew ^ 2 + p
                        yOld = 2 * xNew * yNew + q
                       
                        Color = Color + 1
                    Wend
           
                    If Not DrawP Then Exit Sub
           
                    pctFractal.PSet (X, Y), RGB(Val(txtRed) * Color, Val(txtGreen) * Color, Val(txtBlue) * Color)
           
                Next
     
                    DoEvents
            Next
                DrawP = False
                T2 = Timer
                lblTimer = Val(Abs(T1 - T2)) & " Sekunder"
        Else
            MsgBox ("Du har valgt farver, hvis sum er over 30. Dette gør kvaliteten af fraktalen ringere!")
        End If
    End If
End Sub
Avatar billede melange Nybegynder
25. januar 2004 - 16:45 #5
hmm..trykkede lige "send" men min besked forsvandt bare ?

Anyway, det hele virker nu, pga Val() :D
Jeg ved ikke om det er fordi jeg kun har lavet PHP før i tiden, men jeg har det med at glemme Val() hele tiden :|

Men nu virker det, så hvis du ville lægge et svar ville jeg blive glad :)
Avatar billede kabbak Professor
25. januar 2004 - 16:50 #6
Ok et svar, glad for at kunne hjælpe. ;-))
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester