Mandelbrot Renderer

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Mandelbrot Renderer

    Hallo, ich hab einen Mandelbrot Renderer in Ruby geschrieben, hab aber den algorithmus aus wiki geklaut^^
    (en.wikipedia.org/wiki/Mandelbrot_set#For_programmers)

    Das Problem an dem Algorithmus ist, dass er nur die Iterationstiefe als farbe zurückliefert. Ich würde gerne ein farbiges Bild rendern und hab aber keine Ahnung wie ich aus dem entsprechenden Wert eine Farbe generiere.
    I liegt im Bereich zw. 0 und der max. Iterationstiefe (bei mir meist 1000) und daraus soll eine Farbe generiert werden vorzugsweise in R=.. G=.. B=.. weil das als 3er Block ins Bild geschrieben werden soll. (.PGM/.PBM)

    Weiter unten in dem Wiki Artikel wird gesagt, dass man am Anfang eine Farbtabelle initialisieren soll, mit der die zurückgegebenen Werte abgeglichen werden und damit einer Farbe zugeordnet werden.

    Aber ich hab wie gesagt keine Idee wie ich das realisieren soll. (Wenn ihr nicht in Ruby schreiben könnt, würd ich Pseudocode anderen Programmiersprachen vorziehen, weil ich die sonst nicht lesen kann^^)

    In dem Abschnitt darunter steht auch wie man die Farbstreifen wegbekommt, die mit dem Escape Time Algo entstehen...aber das blick ich nicht ganz. Vllt gibts ja jemanden in diesem Forum der mir das etwas näher bringen kann^^
    Dateien
    • fractal.zip

      (2,29 kB, 264 mal heruntergeladen, zuletzt: )
  • So viel code und Bild ist es ja nicht das es dafür unbedingt ein Zip braucht.

    Quellcode

    1. def setup(breite, x, x2, y, y2)
    2. distancex = sqrt(x*x)+sqrt(x2*x2)
    3. distancey = sqrt(y*y)+sqrt(y2*y2)
    4. hoehe = (distancey/distancex)*breite
    5. hoehe = hoehe.floor
    6. p hoehe
    7. @file.print breite.floor
    8. @file.print " "
    9. @file.puts hoehe.floor
    10. @file.puts 255
    11. @file.puts "\n"
    12. stepx= distancex/breite
    13. stepy= distancey/hoehe
    14. p stepx
    15. p stepy
    16. ypos = 0
    17. xpos = 0
    18. until ypos == hoehe do
    19. until xpos == breite do
    20. render(x, y)
    21. x= x + stepx
    22. xpos+=1
    23. end
    24. y= y + stepy
    25. ypos+=1
    26. xpos = 0
    27. x = -2.5
    28. p ypos
    29. end
    30. end
    31. def render(x0, y0)
    32. x = 0
    33. y = 0
    34. iteration = 0
    35. max_iteration = 1000
    36. while (x*x + y*y) <= (2*2) and iteration < max_iteration do
    37. xtemp = x*x - y*y + x0
    38. y = 2*x*y + y0
    39. x = xtemp
    40. iteration = iteration + 1
    41. end
    42. if iteration == max_iteration
    43. color = 0
    44. else
    45. color = iteration
    46. end
    47. @file.puts(color)
    48. end
    49. include Math
    50. # ###### -EDIT HERE!!!- ################
    51. name = "fraktal.pgm"
    52. #--------------->Bildgrˆfle
    53. breite = 200 #in pixeln
    54. #--------------->Bildausschnitt
    55. x = -2.0 #untere Grenze: -2.5 obere Grenze: x2
    56. y= -1.0 #untere Grenze: -1 obere Grenze: y2
    57. x2 = 1.0 #untere Grenze: x obere Grenze: 1.0
    58. y2 = 1.0 #untere Grenze: y obere Grenze: 1.0
    59. # ###############################
    60. @t1 = Time.now
    61. p breite
    62. @datei = File.new(name, "w")
    63. File.open(name, "w") do |@file|
    64. @file.puts "P2"
    65. @file.puts"# "+name
    66. setup(breite, x, x2, y, y2)
    67. end
    68. @t2 = Time.now
    69. @time = @t2 - @t1
    70. File.open(name+".log.txt", "a") do |log|
    71. log.puts"-#--------------------------#-"
    72. log.puts name
    73. log.print " Startzeit: "
    74. log.puts @t1
    75. log.print " Endzeit: "
    76. log.puts @t2
    77. log.print " Renderdauer: "
    78. log.puts @time
    79. log.puts " (c) Ricardo Mˆser"
    80. log.puts"-#--------------------------#-"
    81. end
    82. p "end"
    83. sleep 1
    Alles anzeigen
    Bilder
    • fraktal.jpg

      4,42 kB, 100×66, 965 mal angesehen