trafassel
Fractal Bachius
Posts: 531


« Reply #2 on: February 08, 2012, 10:54:23 PM » 

Hallo TroyPuzz,
the best way to navigate to the inner part, is to set Formuala.Static.MinCycle and Formuala.Static.Cycles at the same value. With this setting there should be no green cut planes. If this is still the case then you perhaps use an old formula (not from the public folder).
It is possible to walk into an interesting area from the outside and change the angle Transformation.Camera.Angle.Z from 0 to 180 to see the inside. This works, because the rotation center is the center of the examined fractal area.
I added all tomo files, which I found interesting into the gitRepository. Almost all are very old, boring, bad documented and contains some strange parameters, like a rotation at point (0,0,0) . The public scenes (which contains always the used formula in plain text) can be found in the folder public, but there are still to much here and most formulas described in fractalforums.com are missing.
I replaced the six different renderer with just one. So in the current documentation at Gestaltlupe/bin/Gestaltlupe.chm (which is shown if you press documentation in the documentation tab) there is just one renderer explaned. The online documentation is to old, sorry.
To navigate into the scene you can use the forward, backward, left, right ... buttons in the navigation tab or you can zoom by pressing zoom in the view window and select the area with the mouse (one open bug is, that the selection area is not shown while pressing the mouse). Zooming into some of the old files does not work (because of the old rotation settings).
Hope this helps.
The cut planes (for the spirals) and the surface colors are defined in the formula source code.
Cut planes for inside views are little tricky, because you have to distinguish between inside and outside parts in the formula source. This one defines two cut planes (one cut at y=0 and one sea level).
// Definition of the cut plane double maxb=0.0; double minb=0.01;
if(invers) { if(bj>maxb) return 1; } else { if(bj>maxb) return 0; }
if(invers) { if(bj<minb) return 0; } else { if(bj<minb) return 1; }
The following source use the explained cut.
public override void Init() { base.Init();if(GetString("intern.Formula.TempUpdateVal")!="52aed84e936d95698e8c5a9e9f2a57e5"){ SetParameterBulk(@"<Entry Key='Border.Max.x' Value='0.613390339486106' /><Entry Key='Border.Max.y' Value='0.306387648691587' /> <Entry Key='Border.Max.z' Value='9.79780236146181E09' /><Entry Key='Border.Max.zz' Value='0' /><Entry Key='Border.Min.x' Value='0.613390307615348' /><Entry Key='Border.Min.y' Value='0.306387616820829' /><Entry Key='Border.Min.z' Value='2.20729556712198E08' /><Entry Key='Border.Min.zz' Value='0' /><Entry Key='Formula.Mandelbulb.Pow1' Value='' /> <Entry Key='Formula.Static.Cycles' Value='130' /><Entry Key='Formula.Static.Formula' Value='1' /><Entry Key='Formula.Static.jx' Value='0' /><Entry Key='Formula.Static.jy' Value='0' /><Entry Key='Formula.Static.jz' Value='0' /><Entry Key='Formula.Static.jzz' Value='0' /> <Entry Key='Formula.Static.MinCycle' Value='130' /> <Entry Key='Transformation.Camera.AngleX' Value='40' /><Entry Key='Transformation.Camera.AngleY' Value='0' /> <Entry Key='Transformation.Camera.AngleZ' Value='0' /><Entry Key='Transformation.Perspective.Cameraposition' Value='1' /> <Entry Key='Transformation.Stereo.Angle' Value='9' /><Entry Key='Transformation.Stereo.EyeDistance' Value='0.5' /> <Entry Key='View.Height' Value='1200' /><Entry Key='View.Perspective' Value='0' /><Entry Key='View.Width' Value='1200' /> <Entry Key='intern.Formula.TempUpdateVal' Value='52aed84e936d95698e8c5a9e9f2a57e5' />");} additionalPointInfo=new AdditionalPointInfo(); gr1=GetDouble("Formula.Static.Cycles");int tempGr=(int)gr1; gr1=gr1 tempGr;gr1=1gr1;gr1*=2.4; } double gr1=0; public override long InSet(double ar, double ai, double aj, double br, double bi, double bj, double bk, long zkl, bool invers) { double aar, aai, aaj; long tw; int n; int pow = 8; double gr =Math.Pow(10,gr1)+1.0; double theta, phi; double r_n = 0; aar = ar * ar; aai = ai * ai; aaj = aj * aj; tw = 0L; double r = Math.Sqrt(aar + aai + aaj); double phi_pow; double theta_pow; double sin_theta_pow; double rn_sin_theta_pow;double maxb=0.0;double minb=0.01;if(invers) { if(bj>maxb) return 1;} else {if(bj>maxb) return 0;}if(invers) {if(bj<minb) return 0;} else {if(bj<minb) return 1;}additionalPointInfo.red=0; additionalPointInfo.green=0;additionalPointInfo.blue=0;double red=0; double green=0; double blue=0;double piAdd=Math.PI/2.0; for (n = 1; n < zkl; n++) { theta = Math.Atan2(Math.Sqrt(aar + aai), aj); phi = Math.Atan2(ai, ar); r_n = Math.Pow(r, pow); phi_pow=phi*pow; theta_pow=theta*pow; sin_theta_pow=Math.Sin(theta_pow+piAdd); rn_sin_theta_pow=r_n* sin_theta_pow; ar = rn_sin_theta_pow * Math.Cos(phi_pow+Math.PI)+br; ai = rn_sin_theta_pow * Math.Sin(phi_pow+Math.PI)+bi; aj = r_n * Math.Cos(theta_pow+piAdd)+bj; aar = ar * ar; aai = ai * ai; aaj = aj * aj; r = Math.Sqrt(aar + aai + aaj);red=aar;green=aai;blue=aaj; if (r > gr) { tw = n; break; } } additionalPointInfo.red=red;additionalPointInfo.green=green;additionalPointInfo.blue=blue; if (invers) { if (tw == 0) tw = 1; else tw = 0; } return (tw);}
