Deutsch
Forum

Mandelbrotmenge zeichnen

 

Julian
Schmidt
Hey,
ich versuche gerade die Mandelbrotmenge mit XProfan zu zeichnen.

Die Formel zur Bildung der Mandelbrotmenge ist



C steht hier für eine komplexe Zahl. Wie geb ich die in XProfan an?
Ich dachte mir zuerst das der Betrag von C gleich der Länge des Verktors ist.
Ergo gleich Wurzel(Realteil(c)^2+Imaginärteil(c)^2)
Dies scheint nur nicht zu funktionieren.
Def !CXMin -2.2
Def !CXMax 1.2
Def !CYMin -1.5
Def !CYMax 1.5
Def &Iterationen 20
Windowstyle 24
WindowTitle "Mandelbrotmenge"
Window 50,100 - 400, 300
Declare CX!, CY!, CX2!, CY2!, Z!
Declare LX&, LY&
Declare IC&, ColIC&

whileloop 0, width(%hwnd)

    LX&=&loop
    CX2!=CX!
    CX!=!CXMin+(LX&/width(%hwnd))*(!CXMax-!CXMin)
    Clear LY&

    whileloop 0,height(%hwnd)

        LY&=&loop
        CY2!=CY!
        CY!=!CYMax-(LY&/height(%hwnd))*(!CYMax-!CYMin)
        Clear IC&,Z!

        whileloop &Iterationen

            Z!=Sqr(Z!)+Sqrt(Sqr(CX2!)+Sqr(CY2!))' ZN+1=ZN+Complex(CX,CY)
            IC&=&loop
            Case Z!>4 : break

        EndWhile

        ColIC&=(IC&/&Iterationen)*255
        SetPixel LX&,LY&,RGB(ColIC&,ColIC&,ColIC&)

    Endwhile

Endwhile

waitinput

Gruß
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
30.07.2013  
 




Julian
Schmidt
Jemand eine Idee?
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
07.08.2013  
 




Georg
Teles
Oha, du gräbst ja tief, hätte ich die Höhere Mathematik nicht vernachlässigt würde ich vielleicht helfen können xP sry keine Idee
 
XProfan 10
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

08.08.2013  
 




Paul
Glatz

Def !CXMin -2.2
Def !CXMax 1.2
Def !CYMin -1.5
Def !CYMax 1.5
Def &Iterationen 100
Windowstyle 24
WindowTitle "Mandelbrotmenge"
Window 50,100 - 400, 300
Declare CX!, CY!, CX2!, CY2!, x!, x2!, y!
Declare LX&, LY&
Declare IC&, ColIC&

whileloop 0, width(%hwnd)

    LX&=&loop
    CX2!=CX!
    CX!=!CXMin+(LX&/width(%hwnd))*(!CXMax-!CXMin)
    Clear LY&

    whileloop 0,height(%hwnd)

        LY&=&loop
        CY2!=CY!
        CY!=!CYMax-(LY&/height(%hwnd))*(!CYMax-!CYMin)
        Clear IC&, x!, x2!, y!

        whileloop &Iterationen

            SetText %hwnd,str$(&loop)
            x2! = x! * x! - y! * y! + cx2!
            y! = 2 * x! * y! + cy2!
            x! = x2!
            IC& = &loop

            If (x! * x! + y! * y! > 4)

                Break

            EndIf

        EndWhile

        ColIC&=(IC&/&Iterationen)*255
        SetPixel LX&,LY&,RGB(ColIC&,ColIC&,ColIC&)

    Endwhile

Endwhile

waitinput
 
08.08.2013  
 




Julian
Schmidt
Klappt!


33 kB
Hochgeladen:08.08.2013
Ladeanzahl142
Herunterladen
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
08.08.2013  
 




Paul
Glatz
Hier mal etwas größer


152 kB
Hochgeladen:08.08.2013
Ladeanzahl157
Herunterladen
 
08.08.2013  
 




Julian
Schmidt
Anderes Farbschema
Def !CXMin -2.2
Def !CXMax 1.2
Def !CYMin -1.5
Def !CYMax 1.5
Def &Iterationen 50
Windowstyle 24
WindowTitle "Mandelbrotmenge"
Window 50,100 - 400, 300
Declare CX!, CY!, x!, x2!, y!
Declare LX&, LY&
Declare IC&

whileloop 0, width(%hwnd)

    LX&=&loop
    CX!=!CXMin+(LX&/width(%hwnd))*(!CXMax-!CXMin)
    Clear LY&

    whileloop 0,height(%hwnd)

        LY&=&loop
        CY!=!CYMax-(LY&/height(%hwnd))*(!CYMax-!CYMin)
        Clear IC&, x!, x2!, y!

        whileloop &Iterationen,0,-1

            x2! = x! * x! - y! * y! + cx!
            y! = 2 * x! * y! + cy!
            x! = x2!
            IC& = &loop

            If (x! * x! + y! * y! > 4)

                Break

            EndIf

        EndWhile

        SetPixel LX&,LY&,RGB((LX&/width(%hwnd))*256,(LX&/width(%hwnd))*256,IC& | (IC& << 8))

    Endwhile

Endwhile

waitinput


19 kB
Hochgeladen:08.08.2013
Ladeanzahl239
Herunterladen
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
08.08.2013  
 




Paul
Glatz
Andere Farben
Def !CXMin -2.2
Def !CXMax 1.2
Def !CYMin -1.5
Def !CYMax 1.5
Def &Iterationen 100
Windowstyle 24
WindowTitle "Mandelbrotmenge"
Window 50,100 - 400, 300
Declare CX!, CY!, CX2!, CY2!, x!, x2!, y!
Declare LX&, LY&
Declare IC&, ColIC&

whileloop 0, width(%hwnd)

    LX&=&loop
    CX2!=CX!
    CX!=!CXMin+(LX&/width(%hwnd))*(!CXMax-!CXMin)
    Clear LY&

    whileloop 0,height(%hwnd)

        LY&=&loop
        CY2!=CY!
        CY!=!CYMax-(LY&/height(%hwnd))*(!CYMax-!CYMin)
        Clear IC&, x!, x2!, y!

        whileloop &Iterationen

            x2! = x! * x! - y! * y! + cx2!
            y! = 2 * x! * y! + cy2!
            x! = x2!
            IC& = &loop

            If (x! * x! + y! * y! > 4)

                Break

            EndIf

        EndWhile

        If IC& = &Iterationen

            SetPixel LX&,LY&,0

        Else

            ColIC&=((&Iterationen - IC&)/&Iterationen)*360
            SetPixel LX&,LY&,hsv(ColIC&,1,1)

        EndIf

    Endwhile

EndWhile

Waitinput

Proc hsv

    Parameters h!,s!,v!
    Var hi% = h!/60
    Var f! = ((h!/60) - hi%)
    Var p! = V!*(1-S!)
    Var q! = V!*(1-S!*f!)
    Var t! = V!*(1-S!*(1-f!))

    Select hi%

        CaseOf 1

        Return rgb(q!*255,v!*255,p!*255)

        CaseOf 2

        Return rgb(p!*255,v!*255,t!*255)

        CaseOf 3

        Return rgb(p!*255,q!*255,v!*255)

        CaseOf 4

        Return rgb(t!*255,p!*255,v!*255)

        CaseOf 5

        Return rgb(V!*255,p!*255,q!*255)
        Otherwise
        Return rgb(v!*255,t!*255,p!*255)

    EndSelect

EndProc



36 kB
Hochgeladen:08.08.2013
Ladeanzahl147
Herunterladen
 
08.08.2013  
 




Georg
Teles
Sieht super aus, klasse
 
XProfan 10
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

08.08.2013  
 




p.specht

Versuche gerade, dem Mandelbrot-Progi der Herren Schmid und Glatz mittels xpse etwas Dampf zu machen. Aus vielen Fehlern gelernt, hier ein halbwegs funktionierendes Teil (Anmerkungen im nächsten Beitrag).
' --------------------------------------------------------
{$cleq}

Windowstyle 24:WindowTitle "Mandelbrot-Menge"
cls
'Window (%maxx-640)/2,(%maxy-480)/2 - 640,480
'Window 0,0-%maxx,%maxy-42
declare cxmin!,cxmax!,cymin!,cymax!,iter&,tm&,ans&,zoom!,i&

zoom!=0.7
whileloop 10:i&=&loop
zoom!=zoom!*1.3333
CXMin!=-2.2 /zoom!
CXMax!= 1.2 /zoom!
CYMin!=-1.5 /zoom!
CYMax!= 1.5 /zoom!
iter&=255
tm&=&gettickcount
ans&=Mandel(cxmin!,cxmax!,cymin!,cymax!,iter&)
tm&=&gettickcount-tm&
locate 1,1:print format$("#0.0000 sec ",tm&/1000);
waitinput 10
case (%key=27) or (%key=2):end
Endwhile
waitinput 60000
end

nproc Mandel
parameters cxmin!,cxmax!,cymin!,cymax!,iter&
Declare CX!,CY!,x!,x2!,y!,tmp!,LX&
Declare LY&,IC&,col&,w&,hddc&,xd!,yd!
w&=width(hwnd)
hddc& = ~GetWindowDC( %hWnd )
xd! = CXMax! - CXMin!
yd! = CYMax! - CYMin!

whileloop 0,w&
LX&=&loop
CX! = CXMin!
' f!=float(l&), Float2Long einfach l&=long(f!)
tmp!= float(LX&) / float(w&)
cx!=cx! + tmp! * xd!
LY&=0
whileloop 0,height(%hwnd)
LY&=&loop
CY!=CYMax!-(float(LY&)/float(height(%hwnd)))*yd!
IC&=0
x!=0
x2!=0
y!=0
whileloop Iter&,0,-1
IC& = &loop
x2! = sqr(x!) - sqr(y!) + cx!
y! = 2.0 * x! * y!
y! = y! + cy!
x! = x2!
If (sqr(x!)+sqr(y!)) > 4.0
Break
EndIf
EndWhile
col&=IC&*ic&*ic&*ic&
'col&=RGB( long((float(LX&)/float(width(%hwnd))) )*256, long(float(LX&)/float(width(%hwnd)))*256, IC& | (IC& << 8))
'col& = RGB(IC&,IC&,IC& | (IC& << 8) ) 'sw
SetPixel(%hdc,LX&,LY&,col&)
Endwhile
Endwhile
return w&
endproc
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
31.08.2013  
 




p.specht

Viel gelernt, die Nacht durchgemacht beim debugging:
%-Variable gibt es in xpse nicht (höchstens als Zierde zu Systemvariablen),
CLEAR funktioniert nicht,
setpixel u.ähnl. stets nur als Funktion() und mit dem richtigen devicecontext (hdc),
dann noch ein paar Fehler beim Aufruf: float() / float() * 2.0 <<komma Null!!
Gruss

Frage an die Fachwelt:
Muss ich den devicekontext nicht auch am ende killen?
Welche Speicherlecks gibts allenfalls noch?
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
01.09.2013  
 




funkheld
Hmmm..., sieht gut aus .

Vielleicht sollte man in der nProc für XPSE mal Fließkomma-ASM reinsetzen.
Interessiert mich mal wie es damit geht.
Und auch die Geschwindigkeit.

Wenn ich mir den ASM-Code von XPSE dafür anschaue, sehe ich keinen einzigen ASM-Floatbefehl darin, ich nehme an, das hier einfach die langsamen Fließkommaroutienen von Profan genommen werden ?

Man kann in dem ASM auch die Grafikroutinen mit einbauen
Habe mal ein Test gemacht, es werden Rechtecke gezeichnet von links Oben nach rechts Unten :
declare ende&
Window 20,20-750,770
Cls RGB(255,255,255)
UsePen 0,1,RGB(255,0,0)
api_asm()
ende&=1

WHILE ende&

    sleep 1
    waitkey

ENDWHILE

nproc api_asm() {

    long f=0
    Long z=500
    mov ecx,0
    mov eax,0
    anfang:
    Add eax,1
    Add ecx,1
    Mov f,eax
    PushAll
    Rectangle(%hdc,20+f,20+f,200+f,200+f)
    PopAll
    cmp ecx,z
    jb anfang

}


Danke.
Gruss
 
26.12.2013  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

13.438 Betrachtungen

Unbenanntvor 0 min.
Sven Bader29.07.2021
Thomas Freier24.08.2019
Julian Schmidt31.03.2016
Ernst02.03.2015
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie