Autor Beitrag
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Sa 27.11.10 21:00 
Hi!

Ich habe mir kürzlich das Programm XaoS runtergeladen (ein Fraktalviewer / Zoomer). Das Programm hat mich ziemlich durch seinen Real-Time-Zoom beeindruckt. Also habe ich geschaut, wie das Programm das so schnell hinkriegt (nicht alle Programme sind so ineffizient wie meine, aber so ineffizient werden meine auch nicht sein). Ich habe herausgefunden, dass der nach dem XaoS-Autor Jan Hubicka benannte Hubicka-Algorithmus dahintersteckt. Dabei werden Pixel des Vorgängerbildes wiederverwendet. Allerdings verstehe ich den nicht zu 100%.

Das Algorithmus wird hier beschrieben: mit.edu/kolya/sipb/a....2/doc/algorithm.txt

Ich verstehe zum Beispiel nicht, was genau mit "Approximation Algorithm" gemeint ist. Was soll denn genähert werden?
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 04.12.10 21:53 
Wenn ich das richtig verstanden hab, versucht er eine Re-Rasterung durch Interpolation. Klingt aufwendig, ist aber gar nicht so kompliziert.

Grundlegend hat er ein altes Koordinatensystem O mit Punkten (x,y) in x,y € R. Diese müssen auf ein neues, skaliertes und verschobenes Koordinaten-System X mit Punkten (x,y) in x,y € R gemappt werden. x,y € R sind hierbei diskret gegeben durch:

x = x0 + px * dx
und
y = y0 + py * dy

mit dx und dy als Abstände im realen Raum zwischen zwei Zeilen / Spalten und /px,py € N als Pixelindex auf dem Bildschirm.

Gesucht ist nun ein Algorithmus, der die Wertmatrix P_O nach P_N transformiert:

P_N = A(P_O, x0_O, y0_O, x0_N, y0_N, dx_O, dy_O, dx_N, dy_N)

Dieser Algorithmus kann rekursiv geschrieben werden als:

P_N+1 = A(P_N, x0_N, y0_N, x0_N+1, y0_N+1, dx_N, dy_N, dx_N+1, dy_N+1)

mit P_0 = F(x0_0, y0_0, dx_0, dy_0)

und F als darstellenden Funktion zum Berechnen des originalen Fraktals.

HTH.

P.S.: Kleiner Scherz am Rande:

Die Algorithmusbeschreibung:
Other symmetries have been implemented. They do not help much, but once it has been coded there is no reason to remove it.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.