Logo by Pauldelbrot - Contribute your own Logo!
News: Check out the originating "3d Mandelbulb" thread here
 
*
Welcome, Guest. Please login or register. March 25, 2017, 10:35:58 PM


Login with username, password and session length



Pages: [1]   Go Down
  Print  
Share this topic on DiggShare this topic on FacebookShare this topic on GoogleShare this topic on RedditShare this topic on StumbleUponShare this topic on Twitter
Author Topic: a_surf silent comparison  (Read 449 times)
Description: different implementations in m3d and Mandelbulber
0 Members and 1 Guest are viewing this topic.
taurus
Fractal Supremo
*****
Posts: 1138



profile.php?id=1339106810 @taurus_arts_66
WWW
« on: September 13, 2016, 11:27:34 AM »

After some discussions about implementation differences of a_surf, I felt, that no one really understood my words. So I made a little animation about my observations.
Assumptions not discussed there:
@minR=1  implementations of m3d and Bulber are "quality" equal - this means, the visual result has similar properties. Beyond one a_surf simply falls apart - im m3d earlier than in bulber.
What I call logarithmic downscale, is a 10 keyframe CatmullRom interpolated, logarithmic ladder (gives best results). Linear means linear...
Watch fast and think fast. There's a lot of anomalies, that can be discussed.
I really hope, that leads to the REAL differences. Not because I want them to be equal, but I hope this difference might be used as mod in related formulas like a_box and derivates.
Have fun!

<a href="https://vimeo.com/moogaloop.swf?clip_id=182517931&amp;server=vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=01AAEA" target="_blank">https://vimeo.com/moogaloop.swf?clip_id=182517931&amp;server=vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=01AAEA</a>
« Last Edit: September 13, 2016, 04:47:01 PM by taurus » Logged

when life offers you a lemon, get yourself some salt and tequila!
taurus
Fractal Supremo
*****
Posts: 1138



profile.php?id=1339106810 @taurus_arts_66
WWW
« Reply #1 on: October 24, 2016, 01:13:49 AM »

I remember a preface in a Peitgen Book, where Benoit Mandelbrot wrote about Fractal Geometry as an experimental branch of math. Theese Times seem to be over. It has been degenerated into simple coding skills. Understanding is not necessary. I really regret that!
But as the hope dies last here's the logarithmic animation, to examine yourself. I think, further words are pointless.

have fun!

* investigate_log.fract (3.58 KB - downloaded 22 times.)
Logged

when life offers you a lemon, get yourself some salt and tequila!
mclarekin
Fractal Senior
******
Posts: 1588



« Reply #2 on: October 24, 2016, 03:41:00 AM »

I have downloaded the .fract and note  you are doing the comparison with rotation, In a  previous post we discussed how rotation is added  at a different place in the loop between the two formulas. In M3D it is added after the addCpixel, in Mandelbulber it is before the addCpixel.  You cannot compare  minR between the two formulas unless you first remove this difference.

Alternatively in V2.09 there is now an addCpixel option placed before the rotation in Amazing Surf UI.

Here is the code showing the difference between the two formulas (assuming Darkbeam's .m3f is still current)

Code:
Scale = Scale + Scale_vary*(abs(Scale)-1)
x = TgladFold(x,fold)
y = TgladFold(y,fold)
// z is not folded
if SorC != 0
rr = x*x + y*y // cylinder shape for inversion (sometimes buggy but can be cool)
else
rr = x*x + y*y + z*z // sphere shape for inversion (works better)
endif
if rr < sqr(Min_R) then m = Scale/sqr(Min_R) else
if rr < 1 then m = Scale/rr else m = Scale
x = x * m + Cy
y = y * m + Cx
z = z * m + Cz
Rotate3D(x,y,z,angles)

Code:

/**
 * amazing surf from Mandelbulber3D. Formula proposed by Kali, with features added by Darkbeam
 * @reference ????
 * This formula has a c.x c.y SWAP
 */
void AmazingSurfIteration(CVector3 &z, CVector3 c, const cFractal *fractal, sExtendedAux &aux)
{
aux.actualScale =
aux.actualScale + fractal->mandelboxVary4D.scaleVary * (fabs(aux.actualScale) - 1.0);

z.x = fabs(z.x + fractal->transformCommon.additionConstant111.x)
- fabs(z.x - fractal->transformCommon.additionConstant111.x) - z.x;
z.y = fabs(z.y + fractal->transformCommon.additionConstant111.y)
- fabs(z.y - fractal->transformCommon.additionConstant111.y) - z.y;
// no z fold

double r2;
r2 = z.Dot(z);
if (fractal->transformCommon.functionEnabledFalse) // force cylinder fold
r2 -= z.z * z.z;
// if (r2 < 1e-21)
// r2 = 1e-21;

double m;
double sqrtMinR = sqrt(fractal->transformCommon.minR05);
// if (sqrtMinR < 1e-21 && sqrtMinR > -1e-21)
// sqrtMinR = (sqrtMinR > 0) ? 1e-21 : -1e-21;
if (r2 < sqrtMinR)
m = aux.actualScale / sqrtMinR;
else
{
if (r2 < 1.0)
m = aux.actualScale / r2;
else
m = aux.actualScale;
}

z *= m * fractal->transformCommon.scale1 + 1.0 * (1.0 - fractal->transformCommon.scale1);
aux.DE = aux.DE * fabs(m) + 1.0;

if (fractal->transformCommon.addCpixelEnabledFalse)
z += CVector3(c.y, c.x, c.z) * fractal->transformCommon.constantMultiplier111;

z = fractal->transformCommon.rotationMatrix.RotateVector(z);
}




if (fractals.IsJuliaEnabled(sequence))
{
CVector3 juliaC = fractals.GetJuliaConstant(sequence) * fractals.GetConstantMultiplier(sequence);
z += CVector3(juliaC.y, juliaC.x, juliaC.z);
}
else
{
z += CVector3(c.y, c.x, c.z) * fractals.GetConstantMultiplier(sequence);
}
« Last Edit: October 24, 2016, 05:01:36 AM by mclarekin » Logged
taurus
Fractal Supremo
*****
Posts: 1138



profile.php?id=1339106810 @taurus_arts_66
WWW
« Reply #3 on: October 24, 2016, 09:52:10 PM »

What shall I do with this? Learn to code?
I tried with the last set of recepies you provided - like swapping julia x and y and moving the place of the addition of c - without any change of that particular behaviour. And we don't talk about a little difference, we talk about a numerical ratio of 1:1000.
That's exactly what I mean with my last post. I'm sure you didn't even try. You are not able or not willing to try and watch beyond your horizon, so I'm not willing too!
Logged

when life offers you a lemon, get yourself some salt and tequila!
mclarekin
Fractal Senior
******
Posts: 1588



« Reply #4 on: October 25, 2016, 03:18:05 AM »

The difference is in what happens to minR parameter,  it can be  used as minR, minR * minR, sqrt(minR), minR^3 or anything.
It is just relative size of this parameter condition after any maths, compared to  the length of z.


M3D A-surf       minR of 0.5 becomes 0.25
Mandelbulber Asurf          minR of 0.5 becomes 0.707
In newer formulas like Mandlebulber A_surf_mod and multi  minR parameter of  0.5 remains at 0.5 , as there is no need for the additional maths as we are just comparing length z with a condition (an arbitrary  number of the users choosing)). 









Logged
Pages: [1]   Go Down
  Print  
 
Jump to:  

Related Topics
Subject Started by Replies Views Last post
Distance Estimators Comparison 3D Fractal Generation David Makin 0 1224 Last post October 24, 2009, 10:02:58 PM
by David Makin
Silent Running Mandelbulb3D Gallery lenord 0 323 Last post July 21, 2010, 12:33:03 AM
by lenord
comparison of mandelbulber and mandelbulb 3D? Other / General Discussion gussetCrimp 5 6840 Last post October 28, 2010, 01:54:16 PM
by kon16ov
Silent Pillar Mandelbulb3D Gallery BrutalToad 0 188 Last post August 30, 2015, 12:21:54 AM
by BrutalToad
Silent Clockwork Mandelbulb3D Gallery Benzopirate 0 106 Last post September 09, 2016, 05:44:29 AM
by Benzopirate

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines

Valid XHTML 1.0! Valid CSS! Dilber MC Theme by HarzeM
Page created in 0.211 seconds with 28 queries. (Pretty URLs adds 0.011s, 2q)