News: Did you know ? you can use LaTex inside Postings on fractalforums.com!

## The All New FractalForums is now in Public Beta Testing! Visit FractalForums.org and check it out!

 Pages: 1 ... 3 4 [5]   Go Down
 Author Topic: Fractal eXtreme  (Read 58765 times) Description: very fast and very deep 0 Members and 1 Guest are viewing this topic.
panzerboy
Fractal Lover

Posts: 242

 « Reply #60 on: March 06, 2012, 05:16:43 AM »

Just a thought, but a third-order variety for the fxabsmandvar plugin would be super-easy to create just by editing the source code for the original plugin. HPDZ uploaded a third-order burning ship at one point, which I was shocked to find out it had strait dendrites in it, something unheard of for third-order mandelbrots. Th third-order Burning ship really has a beautiful symmetry to it and would make a lovely addition to the Fractal Extreme library.

In fact, I thought of two separate varieties. Although I'm familiar with the complex math involved, for simplicity and readability sake, I'm not writing out the Zi and Zr components to the equation. absi() means the abs function is applied to the i component; absr() is applied only to the real component; absri() is applied to both.

Standard 3rd order absmandvar:
Burning Ship: Z1=absi(Z^3)+C
Celtic: Z1=absr(Z^3)+C
Buffalo: Z1=absri(Z^3)+C

Hybrid 3rd order absmandvar:
Burning Ship: Z1=absi(Z^2)*Z+C
Celtic: Z1=absr(Z^2)*Z+C
Buffalo: Z1=absri(Z^2)*Z+C

I have absolutely no idea what kind of bizzare fractals these "hybrid" 3rd order variations would produce. I'll need to experiment with creating custom formulas in UF but I don't know how to create fractal presets from scratch. I'm not much good at writing code, but I could take a stab-in-the-dark at editing the source. Is there any free or open C compiler that builds DLLs which are compatible with 64-bit windows? I really don't feel like clunking down a wad of cash for something I'll probably only play with once or twice.

I'm not creating anything that looks like HPDZ's Cubic Burning Ship.
To test I did a mandelbrot cubed to make sure I'd got the formula for that part right.
I've uploaded my plugin such as it is onto mediafire.
http://www.mediafire.com/?kkqdg8djtsbci

Perhaps your Hybrid formula will be more promising.

 CubBShip.jpg (6.31 KB, 256x192 - viewed 7286 times.)  CubCeltic.jpg (6.39 KB, 256x192 - viewed 4532 times.)  CubBuffalo.jpg (5.35 KB, 256x192 - viewed 4516 times.) Logged
stardust4ever
Fractal Bachius

Posts: 513

 « Reply #61 on: March 06, 2012, 02:16:10 PM »

Thank you so much for doing this. I just did a quick look at the formulas, and these fractals actually look more like what you'd expect from a 3rd order fractal than HPDZ's cubic ship. I had another look at HPDZ's webpage, and I think this information will be quite helpful.

Quote
Introduction

The "Burning Ship" fractal is a spectacularly beautiful variation on the Mandelbrot set invented by Michael Michelitsch and Otto E. Rössler way back in 1992, consisting of a small modification to the Mandelbrot set's formula (see below).

A seemingly small change in the formula makes a striking difference in the appearance of the fractal!! Images of this thing are incredibly beautiful and radically different from any "analytic" fractals (my term). The non-analytic part is the absolute value, which takes away a lot of the curviness and turns it into angles and lines.

This fractal is absolutely seductive. Every time I zoom into a new area, I want to render it at some insane resolution with 25X noise reduction. It just compels enormity of implementation, it is so beautiful.
Technical Details

The formula for the Burning Ship fractal is very similar to the formula for the Mandelbrot set. Instead of iterating

z = z2 + c

which expands to

z = [Re(z) + i Im(z)]2 + c

which generates the Mandelbrot set, the Burning Ship fractal is obtained by iterating

z = [|Re(z)| + i |Im(z)|]2 + c

The difference, in case it's not clear from the 1-pixel wide lines in the above equation, is the absolute values of the real and imaginary components are used in the Burning Ship fractal.

A small detail to note: Traditionally, the Burning Ship fractal is drawn with at least the y-axis inverted (i.e. negative numbers at the top), so that it looks like a ship. Often, the x-axis is reversed as well, so the ship appears to be heading to the left rather than to the right. All images here have only the y-axis reversed.
Source: http://www.hpdz.net/StillImages/BurningShip.htm

I spent some time reading over the documents on HPDZ's website the other night, specifically the Cubic Burning Ship, and at first it wasn't clear to me whether or not the abs() function should be applied before or after taking the square. You seemed to apply the abs() function after the square, while HPDZ applied the abs() function before.

For your square burning ship plugin, you used:
Quote
Z1 = real(Z^2) + abs(imag(Z^2))i + C
whereas HPDZ used:
Quote
Z1 = (abs(real(Z))+ abs(imag(Z))i)^2 + C

HPDZ chose to flip the formula vertically; you chose to rotate the formula 180 degrees by subtracting C rather than adding. For the purpose of analysis, I will be ignoring flips/rotations. Examining the Burning Ship formula used by you, the abs() function is applied to the imaginary part of Z^2. This isolates Z^2 to complex quadrants I and IV on the number plane, keeping Z^2 above the x-axis. Examining the formula used by HPDZ, the abs() function is applied to both the imaginary and real parts of Z0, prior to the squaring. This restricts Z0 to quadrant I on the complex plane, however after the squaring operation is completed, Z^2 can exist either in quadrants I or IV. So, without using complex algebra to develop a rigorous proof, it seems plausible that your implementation of the Burning Ship and HPDZ's implementation of the Burning Ship may very well be congruent to each other, based upon the possible range of values for Z^2.

That being said, we have developed two very different approaches to creating a Cubic equivalent of the Burning Ship. Having seen the results of the render tests, it seems likely that HPDZ applied the abs() function prior to cubing Z0, whereas with our approach, the abs() function was applied after the cube. Applying the abs() function to both the imaginary and real parts of Z0 will place the final result for Z^3 in quadrants I, IV, or III. Performing the abs() function only to the imaginary part afterwords will place the final result for Z^3 in quadrants I or IV. On a positive note, we have created a new 3rd order plugin that actually looks and feels even more like a third order fractal than the original formulas. The Cubic Buffalo fractal seems especially promising! These are packed with fractal details just like the 2nd order formulas. I'm not entirely sure how to apply the 3rd order Celtic, but I'm pretty sure now that the 3rd order Burning Ship HPDZ used is:
Quote
Z1 = (abs(real(Z))+ abs(imag(Z))i)^3 + C
or at least that seems highly plausible.

I have attached sample renders showcasing the differences between UF5 and Panzerboy's Cubic FX plugin. Both fractal types (sans rotation) are the identical for 2nd order. UF5 doesn't have a plugin named "Buffalo" in the public formulas library so I don't have one to compare to, but the "Flying Squirrel" mistake and the cubic Buffalo variant in Panzerboy's plugin look especially promising.

Update: I had t return t- school today for spring quarter, but not before I started a new zoom movie on my 8-core rendering machine. The Cubic Buffalo has two needles at right angles to each other, and the intricate details within the fractal have sweeping lines and right angles much like the Square Burning Ship and Buffalo fractals, which transform into beautiful kaleidoscope-like hexagon formations. Stunning! Expect a new Youtube upload sometime this coming weekend, for the Cubic Buffalo in glorious HD, well provided the render finishes, that is! Thanks again, PanzerBoy...

I also uploaded two videos the other day, as an example of what one can do with Panzerboy's original fxabsmandvar plugin:
http://www.fractalforums.com/movies-showcase-%28rate-my-movie%29/aztec-ruins/
 UF5 Burning Ship Celtic 2.png (104.08 KB, 640x480 - viewed 3935 times.)  FX PanzerBoy Cubed.png (94.6 KB, 640x480 - viewed 1705 times.) « Last Edit: March 07, 2012, 07:28:37 AM by stardust4ever » Logged
stardust4ever
Fractal Bachius

Posts: 513

 « Reply #62 on: March 10, 2012, 02:10:38 AM »

Just a little update... The Cubic buffalo zoom movie isn't finished yet. I about 409 zooms out of 469, @1280x720 2x2 AA, and the average iterations is now 15k/pixel, so it's moving along slowly. The Cubic Buffalo has much in common with the HPZD's and Ultrafractal's implementation of the cubic burning ship in that it is symmetric across the diagonal. I believe that applying the abs functions to "Z" prior to exponentiation is key. For simplicities sake, it may be easier to to just include the Julia values inside the abs() function by placing them in the parentheses. This shouldn't affect the bailouts and would be equivalent to doing the absolute value first.

I'm currently downloading Microsoft Visual Studio 2010 Pro. I have discovered that Microsoft DreamSpark offers free development software licenses to students of higher learning, and Visual Studio is one of those applications. I'm not currently sure if the license is good for one year only or forever, but this is my last semester in school. It says the application is 32-bits, so will I be able to compile 64-bit DLLs with it? Panzerboy, when I finally do get Visual Studio set up, I may need some help learning to compile DLLs. I've never used a modern compiler before. I've already downloaded the source to your Cubic plugin and looked at it. If it's okay with you, I plan on experimenting with modifications the formulas. If I can get the Cubic ship formula correct (so that it matches the HPDZ video), I'll add a new formula into the DLL and title it "C.B.S. Final" or something like that, and then send you the new source, if it's okay with you.

Another thing I'd like to add, though you told us to remove the old Burning Ship DLL (2nd order) and replace it with the new absmandvar DLL, I had already produced a couple of FX files and zoom movies, and they won't load without the old DLL, so I had to insert it back in. Now I have two Burning Ships in my plugins. I've been using the new one though for new FX files.

Update: Well, I got MS Visual Studio to download, and MS was nice enough to give me an ISO which they let me burn to a DVD-R to produce an installation disc - best part is, there's apparently no product key or expiry date either - Microsoft must really trust me! Otherwise, MS Visual Studio seems extremely full of bloat: about 7.2 Gigabytes worth once it's installed to the hard drive, and I didn't even have to restart the computer... Anyway, I downloaded the source for your Cubic Burning Ship plugin, as well as the Fractal Extreme sampleplugin kit, and I attempted to open them with Microsoft Visual Studio 2010. It seems your source code folder is missing the .sln file. I found the "SamplePlugin.sln" file in the plugin kit from Fractal Extreme, and I was able to generate a 64-bit sampleplugin.dll without any problems (it simply draws the Mandelbrot set). I noticed you did not have a .sln file in your source, so I manually used the "create new project from source files" option to import the folder. I've tried this numerous times with various settings and I have been unable to successfully debug or release a .dll file without generating errors. First problem I solved was that for whatever reason, the .lib files for the 32 and 64 bit maths are not included in the library, so I had to add them manually. After multiple debug attempts, I still do not understand what I'm doing wrong. For the record, I tried deleting the .sln file from the plugin kit and created a new project from the existing files, and it generated the same types of errors, so I must be doing something wrong when I try to generate a new .sln, or is it even possible to build a new project out of the existing source and compile successfully without the original project file? Confused...

Update 2: Wow, I figured it out! Just when I had given up, I go to the fridge and open a couple of to take my mind off the problem (if your under 21, don't try this). I won't say how many I had. Anyway, my gut feeling had been telling me all along that (abs(Zr)+abs(Zi)i)^3 + C was the correct answer. Suddenly, I get a brainstorm and rush to the computer to edit the sample plugin code in calc.app that I know is compilable. That's
Quote
Cubic Burning Ship: Z1 = |Z0|^3+C
with the abs function applied to both the real and imaginary axis. And the buffalo fractal is
Quote
Cubic Buffalo: Z1 = |Z0^3|+C
with the abs function applied to Z^3, again on both the real and imaginary axis, just like the plugin. Well, my cubic burning ship hack job on SamplePlugin.dll works, at least until I hit 45 zooms when it changes back to plain vanilla Mandelbrot! The sample code I edited in the screenshot (highlighted in green) is highly unoptimized, but it works. At least now I've got something that resembles HPDZ's and UF5's plugin version...

Quote from: New Cubic Burning Ship Code
zi = ((zrsqr * 3.0) - zisqr) * abs(zi) + JuliaI;
zr = (zrsqr - (zisqr * 3.0)) * abs(zr) + JuliaR;
zisqr = abs(zi) * abs(zi);
zrsqr = abs(zr) * abs(zr);
 3rd order.png (215.86 KB, 1920x1080 - viewed 1515 times.) « Last Edit: March 11, 2012, 01:57:15 AM by stardust4ever » Logged
panzerboy
Fractal Lover

Posts: 242

 « Reply #63 on: March 11, 2012, 06:18:36 AM »

The new Cubic Burning Ship plugin is live at Sourceforge now.
Looks like HPDZ's finally.

http://sourceforge.net/projects/fxbship3/files/

I removed the .sln and lots of other Visual Studio files because they caused me problems with VS 2008 Express.
The way I create plugins is to take a a clean copy of the SamplePlugin files, removing all .sln, .vcproj and other VS files.
Leaving, the .cpp, .h, .lib, .rc, .rc2 and .ico files.
Then File -> new -> project from existing code.
Accept the project type of Visual C++
Browse to the project location, I usually select the directory immediatley under Projects.
Give the project a name, subfolders should be ticked.
On the Specify Project Setting dialog, drop down to select Project Type of Dynamically linked library.
I Next through the Debug setting and Finish at the Release settings.
I select the Build -> Configuration Manager and drop down under Active solution Configuration to Release.
Debug build dlls crash Fractal Extreme so I don't bother with Debug builds
Drop down the Active Solution platform, if X64 isnt shown we need to add it so select New.
X64 Should default in the New Solution Platform dialog that pops up so ok to accept and close configuration manager.
I set the optimization for both Win32 and X64 platforms at the same time.
Project->Properties, drop down platform to select all platforms.
Now Expand the tree for Configuration properties and C/C++ and select optimization.
I Set optimization on the right to Maximize speed.
Inline Function Expansion to any suitable.
Favor Size or speed to Favor fast code.
and Apply.
Now we need to add the mathhelper library which is two versions for Win32 and X64 so drop down Platform to Win32.
Expand Linker in the tree and select Input, in Additional Dependancies type in Win32\FXMathHelper.lib then Apply.
Drop down platform for X64, the linker input should still be slected to into Additional Dependancies type in X64\FXMathHelper.lib and apply.
Ok to close the project properties dialog.
A build new should build

And that all you need to do

Sorry about the renamed dlls not supporting the old equations.
Theres an equation identifier in the .fx file that needs to be found in the plugins.
Unfortunately just changing the text with a hex editor won't do.
There will be Header size somewhere in the .fx file that needs to be changed when the size of the text identifier changes.

 Logged
stardust4ever
Fractal Bachius

Posts: 513

 « Reply #64 on: March 11, 2012, 11:03:01 AM »

Hey, thanks for taking the time to do this. Now I can really appreciate it even more having dabbled around with coding. There's a lot of hidden work to writing code that I simply just don't understand yet. Especially, the calc_fixed.cpp portion of the code is not as friendly to read for humans, but really the integer portion holds most of the meat required for deep-zooming. Creating plugins for Fractal Extreme is probably not a beginner project, anyway. I will probably need to find a good reference book on C++ and Visual Studio. Then I may try to tackle the perpendicular Mandelbrot formula sometime.

The new Cubic Burning Ship plugin is live at Sourceforge now.
Looks like HPDZ's finally.

http://sourceforge.net/projects/fxbship3/files/

....

Sorry about the renamed dlls not supporting the old equations.
Theres an equation identifier in the .fx file that needs to be found in the plugins.
Unfortunately just changing the text with a hex editor won't do.
There will be Header size somewhere in the .fx file that needs to be changed when the size of the text identifier changes.

It's probably more trouble than it's worth, unless you're trying to tweak an old .fx file that took days/months of rendering to pull off. I'm assuming that completed zoom movies should open in the player just fine; you just won't be able to use the "explore from here" tool. But that's the kind of situation you run into when trying to beta test stuff. As long as the coordinates can still be copied into notepad and saved, it's good. My Cubic Buffalo zoom is on frame 443 of 469 and the iteration bands are starting to get denser (it's now taking 1 hour 20 minutes per frame), so it shouldn't be too much longer.

The Celtic version is still not right either, but it is close.I'm still trying to wrap my head around why the UF5 version differs from your version.
Quote from: UF5 parameters
loop:
z = z^@power
z = z - real(z) + abs(real(z)) - c
UF5 code raises Z to the nth power, then subtracts real Z from Z, before re-adding the absolute value. Despite being poorly optimized (like most of the UF5 code), it's still just taking the abs() function on the real component of z^n, so I don't really know why your second order function is identical to it but not the third order, as unlike the Burning Ship fractal, the implementation method used here appears to be the same. UF5 uses "-C" instead of "+C" but all that really does is flip the fractal 180 degrees.
 « Last Edit: March 11, 2012, 11:29:23 AM by stardust4ever » Logged
stardust4ever
Fractal Bachius

Posts: 513

 « Reply #65 on: March 12, 2012, 04:26:44 AM »

Update: It has been a very productive weekend for me.

I looked up the formula for the Perpendicular Mandelbrot in Ultrafractal. The Perpendicular Mandelbrot formula is pretty straightforward; it is created by taking a vertical slice from the 2nd order Mandelbulb. While the original Mandelbulb formula used trig functions, the integer power versions of the formula can also be represented as polynomials. Originally, this was worked out through some convoluted system of triplex algebra Z{x,y,z} where x and y are the real and imaginary components of the Mandelbrot set and z makes up the vertical component of the Mandelbulb.

Despite the polynomial form of the equation (which I still haven't located yet, not that it matters) having a square root function, it is found somewhere within the variable r the form r = sqrt(y^2+z^2). Because the Perpendicular Mandelbrot ignores the y axis completely, all of the y's are set to zero and cancel out of the equation, which simplifies out to r = |z| (or something similar to that), eliminating the square root entirely. The solution to the convoluted triplex algebra system is really beyond the scope my understanding, but with all the y's completely removed from the equation, it basically works out to:

Zi1 = |Zr| * Zi * -2 + Ci
Zr1 = Zr^2 - Zi^2 + Cr

as the formula for the perpendicular Mandelbrot. If you remove the abs() function from Zr, you get

Zi1 = Zr * Zi * -2 + Ci
Zr1 = Zr^2 - Zi^2 + Cr

which is the formula for the Mandelbar / Tricorn fractal. The Mandelbar / Tricorn fractal is quite fascinating in that about half of the minis are Mandelbars, while the other half of them are Mandelbrots. The main difference between the Mandelbar / Tricorn formula and the Mandelbrot formula is for the imaginary portion of the equation, Zi*Zr is multiplied by -2 instead of 2. This inverts the imaginary values after every iteration, creating the three-armed pattern instead of the bulbous Mandelbrot. I have also taken the liberty of creating Celtic variations on both the Mandelbar / Tricorn and the Perpendicular Mandelbrot fractals, as well as Burning Ship and Buffalo variations on the Perpendicular Mandelbrot. For the Buffalo and Burning Ship versions, the abs() function has been removed from Zr and applied to the Zi component on the Zi side of the equation. I did not do the Mandelbar variants of Burning Ship and Buffalo because those are identical to the Mandelbrot variants. So without further ado, I have attached samples of the C++ code that I used for each fractal, followed by sample renders (this time they were all rendered in Fractal Extreme). I'm not ready to create plugins yet, because I still have some learning to do, and I don't want to release crap plugin code that doesn't work well. I may need some help with the "IsNegative" command that Panzerboy used to apply the abs() function within the arbitrary precision portion of the plugin (the code in fixed.cpp still looks like greek to me). I can't install MS Visual Studio on my Laptop because I don't have enough free space on my hard drive, and I've got classes Monday through Friday at the university (pretty soon, I will be loaded with tons of homework as well), so I likely won't be able to work on code except on weekends, and my fiance was more than a little upset with me for being tied to the computer the whole time I was home.

Quote from: C++ Code
Mandelbar/ Tricorn:

zi = zr * zi * -2.0 + JuliaI;
zr = zrsqr - zisqr + JuliaR;
zisqr = zi * zi;
zrsqr = zr * zr;

Mandelbar Celtic:

zi = zr * zi * -2.0 + JuliaI;
zr = abs(zrsqr - zisqr) + JuliaR;
zisqr = zi * zi;
zrsqr = zr * zr;

Perpendicular Mandelbrot:

zi = abs(zr) * zi * -2.0 + JuliaI;
zr = zrsqr - zisqr + JuliaR;
zisqr = zi * zi;
zrsqr = zr * zr;

Perpendicular Burning ship:

zi = zr * abs(zi) * -2.0 + JuliaI;
zr = zrsqr - zisqr + JuliaR;
zisqr = zi * zi;
zrsqr = zr * zr;

Perpendicular Celtic:

zi = abs(zr) * zi * -2.0 + JuliaI;
zr = abs(zrsqr - zisqr) + JuliaR;
zisqr = zi * zi;
zrsqr = zr * zr;

Perpendicular Buffalo:

zi = zr * abs(zi) * -2.0 + JuliaI;
zr = abs(zrsqr - zisqr) + JuliaR;
zisqr = zi * zi;
zrsqr = zr * zr;
 Mandelbar Abs Variants.png (99.83 KB, 640x720 - viewed 4279 times.) « Last Edit: March 12, 2012, 04:41:05 AM by stardust4ever » Logged
cKleinhuis
Fractal Senior

Posts: 7044

formerly known as 'Trifox'

 « Reply #66 on: March 12, 2012, 09:41:04 AM »

people make up new threads for new formulas ..
 Logged

---

divide and conquer - iterate and rule - chaos is No random!
 Pages: 1 ... 3 4 [5]   Go Down