Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Newton Fraktal

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 06.11.2006, 17:19    Titel: Newton Fraktal Antworten mit Zitat

Abend! Ich habe schon weider ein problem....


ich suche seit Tagen nach Sources in basic die ein newton-Fraktal berechnen. Ich bin selbst bis jetzt nciht fähig gewesen es selbst zu schreiben, da mir erstens die Zeit fehlt und zweitens das Hirnschmalz da ich im moment einfach zu beschäftigt bin um genauer darüber nach zu denken.

hat vielleicht einer von euch einen Source für mich?

BITTE BITTE BITTE?
_________________
Danke an Volta für seine großartige MMX_fade function. *verneig*
Personal-DNA:
<script src="http://personaldna.com/h/?k=qtrCFboSuCOpFrX-OI-AADBA-f78d&t=Free-Wheeling+Leader">
</script>


Zitat:
Das Forum für den zum QBASIC kompatieblen open soure FreeBasic Kompiler.
by DJ. Peters
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 06.11.2006, 18:16    Titel: Antworten mit Zitat

Quellcode habe ich keinen, aber

http://de.wikipedia.org/wiki/Newton-Fraktal

gibt dazu eine doch recht gute Erklärung. Wichtig: Sind halt alles Operationen mit komplexen Zahlen! Ansonsten hatte ich früher auch viel mit Apfelmännchen, Mandelbrot, Juliamenge & Co herumexperimentiert und die dortigen Programme unter

http://www.dreael.ch/Deutsch/Download/Apfelmaennchen.html

als Download zur Verfügung gestellt. Hinweis: Der QB-Code dürfte wahrscheinlich 1:1 auch in FreeBasic lauffähig sein.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
croco97



Anmeldungsdatum: 04.11.2005
Beiträge: 260

BeitragVerfasst am: 06.11.2006, 22:47    Titel: Antworten mit Zitat

Vielleicht hilft dir das etwas weiter:

http://www.vb-helper.com/howto_net_newtons_method_fractal.html

Viele Grüsse!

Croco
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 11.11.2006, 13:06    Titel: Antworten mit Zitat

Also.... Ich habs bis ejtzt ned geschafft. Alles vergeblich.... Hat wirklich keiner einen ordentlichen Source der ein NEWTON FRAKTAL berechnet?
_________________
Danke an Volta für seine großartige MMX_fade function. *verneig*
Personal-DNA:
<script src="http://personaldna.com/h/?k=qtrCFboSuCOpFrX-OI-AADBA-f78d&t=Free-Wheeling+Leader">
</script>


Zitat:
Das Forum für den zum QBASIC kompatieblen open soure FreeBasic Kompiler.
by DJ. Peters
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 11.11.2006, 19:17    Titel: Antworten mit Zitat

Hi psygate,
..aber natürlich gibt es Quell-Code für das Newton-Fraktal:
http://www.hyper-world.de/programme/fractalviewer.html
..nur dummerweise nicht in FreeBASIC grinsen
Ich hab mir den Quell-Code mal gezogen, aber leider verstehe ich zuwenig C++, um das zu verstehen..
Der Quell-Code für das Newton Fraktal steht in ..\inc\Fraktal.h oder so ähnlich..
..frag mich bitte nicht, wieso der so entsetzlich viele Variablen übergibt, die er nicht benutzt und wie das mit den C-Pointern funktioniert grinsen
btw:
Vorsicht: Er schreibt 'Systemvorraussetzungen' happy
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 11.11.2006, 23:10    Titel: Antworten mit Zitat

Regenwetter und einmal nicht im Geschäft sein Dank - habe kurz ein kleines Newton-Fraktal selber programmiert. Ist in QBasic V1.1 entstanden, dürfte aber vermutlich in FreeBasic 1:1 oder mit nur ganz geringen Anpassungen lauffähig sein. Download:

http://beilagen.dreael.ch/QB/NEWTONFR.BAS

Einige Hintergrundinformationen dazu: Dem einen oder anderen dürfte das Newton-Verfahren bekannt sein, um Gleichungen rein numerisch lösen zu können.

Normalerweise setzt man den Startwert in der Lösungsnähe an, so dass der Rechner schnell zur gesuchten Lösung kommt, z.B. im CAD-Programm den Schnittpunkt zweier Splines berechnet. Wenn man den Startpunkt ungünstig wählt und die Funktion besitzt mehrere Nullstellen, dann ist es gewissermassen dem Zufall überlassen, welche Nullstelle als Lösung berechnet wird.

Erweitert man den Zahlenraum auf komplexe Zahlen, so dass es eine Ebene von möglichen Startwerten gibt, wählt man ausserdem die Funktion als Polynom eines beliebigen Grades und registriert systematisch mit verschiedenen Farben die Lösungen (Nullstellen!) auf der Ebene, zu welchen das Newton-Verfahren konvergiert, so erhält man die bekannten Fraktale, welche übrigens immer entsprechend dem Polynom-Grad n-Länderecken darstellen, wenn man die Nullstellen beim Polynom als reguläres Vieleck auf der komplexen Ebene anordnet. Das wäre, wie wenn man Deutschland, Österreich und die Schweiz noch so in Enklaven zerlegen würde, dass es nirgends einen Punkt mehr gibt, an welchem nur zwei Länder angrenzen, d.h. gesamte Landesgrenze besteht nur aus 3-Länderecken.

Ich gebe sonst hier einen Satz Beispielwerte zum Ausprobieren an, welche auch ein optisch ansprechendes Ergebnis liefern:
Eingaben hat Folgendes geschrieben:
C:\BASICPRG\QBASIC\FORUM>qbasic /run newtonfr
Eingabe Parameter: Nullstellen des Polynoms
Anzahl Nullstellen? 4
1 . Nullstelle (Format Real,Imaginär)? 1,0.6
2 . Nullstelle (Format Real,Imaginär)? -0.5,1.1
3 . Nullstelle (Format Real,Imaginär)? -1,-0.4
4 . Nullstelle (Format Real,Imaginär)? 0.5,-0.9
Grenze, wo die Nullstelle als erreicht gilt? 0.01
Ausschrittbetrag (Grenze, falls das Newton-Verfahren divergiert)? 50000
Maximale Iterationstiefe? 100
Eingabe Ausschnitt aus der Gauss'schen Ebene
Real min? -2
Imaginär min? -1.5
Imaginär max? 1.501


Hinweise zum Programm selber: Es wurde nicht auf Geschwindigkeit, sondern auf Lesbarkeit hin optimiert.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 12.11.2006, 12:46    Titel: Antworten mit Zitat

Hi dreael,
es ist einfach oberaffen..stark.
Jetzt kann ich auch den Wiki-Artikel verstehen(u.a.)
[Edit]
..beim Spielen mit dem Newton-Fraktal fiel mir auf:
dreael hat Folgendes geschrieben:
WHILE ziel% = -1 AND aIt% < itMax% AND z.r * r.r + z.i * z.i < diverg2!
r.r ist auch deklariert, erhält aber nie einen Wert..
richtig scheint hier z.r zu sein zwinkern
..wie gesagt, in meiner SpielVersion:
Code:
' Newton-Fraktal
'von A.Meile aka dreael
'bearbeitet von ytwinky
#define Real Single
Option Explicit

Type Komplex
  r As Real
  i As Real
End Type

Declare Function Betrag(byVal z1 As Komplex, byVal z2 As Komplex) As Real
Const DateiName="Newton_Fraktal.Koo"
Dim As Komplex t, z, fx, fdiffx, nx, q
Dim As Long MaxScreenX, MaxScreenY, AnzNullSt, i, j, itMax, y, x, ait, Ziel, DNr=FreeFile
Dim As Real Toleranz, Divergenz, xMin, yMin, yMax, Schranke, yt
nx.r=0.0
nx.i=0.0
Screen 19
ScreenInfo MaxScreenX, MaxScreenY
'?"Eingabe Parameter: Nullstellen des Polynoms"
'Input "Anzahl Nullstellen"; AnzNullSt
AnzNullSt=4
Dim As Komplex Nullst(0 To AnzNullSt-1), Poly(0 To AnzNullSt), Poly1Diff(0 To AnzNullSt-1)
For i=0 To AnzNullSt ' Polynom initialisieren
  Poly(i)=nx
Next i
Poly(0).r = 1.0 'bloß nicht vergessen

For i=0 To AnzNullSt-1
'  ? i;
'  Input". Nullstelle (Format Real,Imagin„r)"; Nullst(i-1).r, Nullst(i-1).i
  Read Nullst(i).r, Nullst(i).i
  For j=i+1 To 1 Step -1 ' Polynom-Koeffizienten bilden (Faltungsprozess)
    Poly(j).r+=Poly(j-1).r
    Poly(j).i+=Poly(j-1).i
     q.r=Poly(j-1).r*-Nullst(i).r-Poly(j-1).i*-Nullst(i).i
     q.i=Poly(j-1).r*-Nullst(i).i+Poly(j-1).i*-Nullst(i).r
     Poly(j-1)=q
  Next j
Next i

'Input "Grenze, an der die Nullstelle als erreicht gilt"; Toleranz
Toleranz=0.01
'Input "Ausschrittbetrag (Grenze, falls das Newton-Verfahren divergiert)"; Divergenz
Divergenz=50000
'Input "Maximale Iterationstiefe"; itMax
itMax=100

' 1.Ableitung bilden
t.i=0.0
For i=1 To AnzNullSt
  t.r=i
'  Aufmultiplizieren Poly1Diff(i-1), t
  Poly1Diff(i-1).r=Poly(i).r*t.r-Poly(i).i*t.i
  Poly1Diff(i-1).i=Poly(i).r*t.i+Poly(i).i*t.r
Next i

'?"Eingabe Ausschnitt aus der Gauss'schen Ebene"
'Input "Real min"; xmin
xmin=-2
'Input "Imagin„r min"; ymin
ymin=-1.5
'Input "Imagin„r max"; ymax
ymax=1.501
' xmax kann aufgrund der Bildschirmproportionen berechnet werden
' denn wir wollen kein verzerrtes Fraktal
WindowTitle "Newton-Freaktal: Real max=" &(xMin+(yMax-yMin)/0.75)

' Ab hier Berechnung
Schranke=(yMax-yMin)/MaxScreenY
Toleranz*=Toleranz
Divergenz*=Divergenz
Open DateiName For Output As #Dnr
Palette 0, RGB(63, 63, 63)
?#DNr, 0, RGB(63, 63, 63)
For i=1 To 3
  j=63-5*i
  Palette i, RGB(0, j, 0)
  ?#DNr, i, RGB(0, j, 0)
  Palette i+3, RGB(0, 0, j)
  ?#DNr, i+3, RGB(0, 0, j)
  Palette i+6, RGB(j, 0, 0)
  ?#DNr, i+6, RGB(j, 0, 0)
  Palette i+9, RGB(0, j, j)
  ?#DNr, i+9, RGB(0, j, j)
  Palette i+12, RGB(0, j, j)
  ?#DNr, i+12, RGB(0, j, j)
Next i
For y=0 To MaxScreenY-1
  For x=0 To MaxScreenX-1
    z.r=xmin+x*Schranke ' Startwert vom Newton-Verfahren, an dem wir beginnen wollen
    z.i=ymax-y*Schranke
    aIt=0
    Ziel=-1
    Do
      For i=0 To AnzNullSt-1 ' Ziel erreicht pr?fen
        If Betrag(z, Nullst(i))<Toleranz Then
          Ziel=i
        End If
      Next i
      If Ziel-1 Then
        fx=nx
        For i=AnzNullSt To 0 Step -1 ' Wert f(z) berechnen (Polynom)
          t.r=fx.r*z.r-fx.i*z.i+Poly(i).r
          t.i=fx.r*z.i+fx.i*z.r+Poly(i).i
          fx=t
        Next i
        fdiffx=nx
        For i=AnzNullSt-1 To 0 Step -1 ' Wert f'(z) berechnen (Polynom)
          t.r=fdiffx.r*z.r-fdiffx.i*z.i+Poly1Diff(i).r
          t.i=fdiffx.r*z.i+fdiffx.i*z.r+Poly1Diff(i).i
          fdiffx=t
        Next i
        yt=fdiffx.r*fdiffx.r+fdiffx.i*fdiffx.i ' Wert z(n+)=z(n)-f(z(n))/f'(z(n)) berechnen
        z.r+=-(fx.r*fdiffx.r+fx.i*fdiffx.i)/yt
        z.i+=(fx.r*fdiffx.i-fx.i*fdiffx.r)/yt
        aIt+=1
      End If
    Loop Until Not(Ziel=-1 And aIt<itMax And z.r*z.r+z.i*z.i<Divergenz)
    PSet (x, y), IIF(Ziel=-1, 0, 3*(Ziel Mod 5)+aIt Mod 3+1)
    ?#DNr, Str(x) &"$" &y &"%" &IIF(Ziel=-1, 0, 3*(Ziel Mod 5)+aIt Mod 3+1)
  Next x
Next y
Close DNr
Sleep
Screen 0

Function Betrag(byVal c1 As Komplex, byVal c2 As Komplex) As Real
  Dim As Real DeltaR=c2.r-c1.r, DeltaI=c2.i-c1.i
  Return DeltaR*DeltaR+DeltaI*DeltaI
End Function

Data 1, 0.6, -0.5, 1.1, -1, -0.4, 0.5,-0.9
..habe ich nur die Standardvorgaben von dreael drin.
Ich wollte die Geschwindigkeitsunterschiede bei anderen Auflösungen testen(u.a.)
[Edit]
Code geändert, damit ich auch speichern kann..
..einlesen kann ich jetzt auch..
..und jetzt dreh' ichs, aber das kann dauern..
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..

Zuletzt bearbeitet von ytwinky am 12.11.2006, 17:55, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 12.11.2006, 15:16    Titel: Antworten mit Zitat

ytwinky hat Folgendes geschrieben:
..beim Spielen mit dem Newton-Fraktal fiel mir auf:
dreael hat Folgendes geschrieben:
WHILE ziel% = -1 AND aIt% < itMax% AND z.r * r.r + z.i * z.i < diverg2!
r.r ist auch deklariert, erhält aber nie einen Wert..

Danke für den Hinweis. Bereits korrigiert. Sollte natürlich z.r*z.r+z.i*z.i sein (Betrag prüfen, ob der Wert ins Unendliche divergiert)...
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 13.11.2006, 19:24    Titel: Antworten mit Zitat

Hi,
das Drehen der Grafik dauert erwartungsgemäß länger als das reine Laden(~3sec).
Außerdem funktioniert es nicht so einfach, wie ich es mir dachte traurig
Wer damit spielen möchte:
Code:
'Newton-Fraktal [gedreht] anzeigen
'von ytwinky
#define Real Single
Option Explicit

Const DateiName="Newton_Fraktal.Koo", alpha=0 '-0.3054326190990 '-17.5
Dim As Long i, j, c, y, x, y1, x1, y0=-150, x0=150, k, DNr=FreeFile
Dim As String s, a, e
Dim As Double Start, Ende
WindowTitle "Newton-FreaktalShow"
Screen 19
a=Time
Start=Timer
Open DateiName For Input As #Dnr
  Input #DNr, i, c
  Palette i, c
  For i=1 To 3
    Input #DNr, j, c
    Palette j, c
    Input #DNr, j, c
    Palette j, c
    Input #DNr, j, c
    Palette j, c
    Input #DNr, j, c
    Palette j, c
    Input #DNr, j, c
    Palette j, c
  Next i
  Do While Not Eof(DNr)
    Input #Dnr, s
    k+=1
    i=Instr(s, "$")
    j=Instr(s, "%")
    x=Val(Left(s, i-1))
    y=Val(Mid(s, i+1, j-1-i))
    If alpha<>0 Then
      x1=(x-x0)*cos(alpha)-(y-y0)*sin(alpha)
      y1=(x-x0)*sin(alpha)+(y-y0)*cos(alpha)
      x=x1
      y=y1
    End If
    c=Val(Mid(s, j+1))
    PSet (x, y), c
  Loop
Close DNr
Ende=Timer
e=Time
'Screen 0
'?"Start=" &a
'?"Zeit="&(Ende-Start)
'?"Ende=" &e
Sleep

Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz