Skip to content

Commit

Permalink
Merge pull request #5 from hrkalona/release/1.0.8.4
Browse files Browse the repository at this point in the history
Update
  • Loading branch information
hrkalona authored Nov 18, 2022
2 parents 359f30e + fa33e04 commit 9a21243
Show file tree
Hide file tree
Showing 2,764 changed files with 616,351 additions and 19,907 deletions.
19 changes: 19 additions & 0 deletions Changelog.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,22 @@
Version 1.0.8.4
-Added mpfr lib as an option for the reference calculations which adds a lot of speed-up in very deep zooms
-Added and an option to choose the high precision library: Double (53 bits), DoubleDouble(106 Bits), Built-in, Mpfr, Automatic
-Added semi-automatic precision setting
-Optimized the Complex extended exponent library to increase performance
-Optimized the pixel calculation when using high precision libraries
-Added the Nanomb1 approximation method for Mandelbrot
-Added Normal Map (and distance estimation) Statistical coloring method support for Series Approximation and Nanomb1
-Fixed the Julia Perturbation algorithm in order to use a dedicated second reference for glitch checks
-Changed the Julia seed to support high precision
-Added the multiwave algorithm with some presets under the "Generated Palette option"
-Changed the thread mechanism to support different type of splits (Grid, Vertical, Horizontal)
-Added a direct palette loader (Map files in rgp triplet format) and included a lot of presets
-Added pixel jitter as an option
-Added an option to cancel the current render
-Modified quick-draw in order to have a configurable delay before the full render, and also added an option to zoom only to current center
-Fixed a bug with BLA and period
-Bug fixes and stability changes

Version 1.0.8.3
-Fixed Normal Map (and distance estimation) Statistical coloring method to work correctly with BLA
-Changed the 1-Step BLA radius which increased the performance
Expand Down
7 changes: 3 additions & 4 deletions README.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
Fractal Zoomer 1.0.8.3
Fractal Zoomer 1.0.8.4

The most complete fractal generating software using java!

Optimizations:
Boundary Tracing
Divide and Conquer
Pertubation Theory
Periodicity Checking
Perturbation Theory

Functions:
Over 200 different fractal generating functions
Expand All @@ -16,7 +15,7 @@ User Formulas
Custom user functions (code written by the user)
Plane transformations
Rotation
Perturbation
Initial Perturbation
Initial Value
Bailout Tests
Palette editor
Expand Down
Binary file added lib/jackson-annotations-2.13.4.jar
Binary file not shown.
Binary file removed lib/jackson-annotations-2.9.0.jar
Binary file not shown.
Binary file added lib/jackson-core-2.13.4.jar
Binary file not shown.
Binary file removed lib/jackson-core-2.9.8.jar
Binary file not shown.
Binary file added lib/jackson-databind-2.13.4.jar
Binary file not shown.
Binary file removed lib/jackson-databind-2.9.8.jar
Binary file not shown.
Binary file added lib/jna-5.12.1.jar
Binary file not shown.
19 changes: 17 additions & 2 deletions src/fractalzoomer/bailout_conditions/BailoutCondition.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package fractalzoomer.bailout_conditions;

import fractalzoomer.core.*;
import fractalzoomer.core.mpfr.MpfrBigNum;
import org.apfloat.Apfloat;

/**
Expand All @@ -28,13 +29,15 @@ public abstract class BailoutCondition {
protected double bound;
protected Apfloat ddbound;
protected BigNum bnbound;
protected DoubleDouble ddcbound;
protected int id;

public BailoutCondition(double bound) {
protected BailoutCondition(double bound) {

this.bound = bound;
if(ThreadDraw.PERTURBATION_THEORY) {
ddbound = new MyApfloat(bound);
ddcbound = new DoubleDouble(bound);

if(ThreadDraw.USE_BIGNUM_FOR_REF_IF_POSSIBLE) {
bnbound = new BigNum(ddbound);
Expand All @@ -47,14 +50,26 @@ public BailoutCondition(double bound) {
public abstract boolean escaped(BigComplex z, BigComplex zold, BigComplex zold2, int iterations, BigComplex c, BigComplex start, BigComplex c0, Apfloat norm_squared, BigComplex pixel);
public abstract boolean escaped(BigNumComplex z, BigNumComplex zold, BigNumComplex zold2, int iterations, BigNumComplex c, BigNumComplex start, BigNumComplex c0, BigNum norm_squared, BigNumComplex pixel);

public abstract boolean escaped(DDComplex z, DDComplex zold, DDComplex zold2, int iterations, DDComplex c, DDComplex start, DDComplex c0, DoubleDouble norm_squared, DDComplex pixel);

public abstract boolean escaped(MpfrBigNumComplex z, MpfrBigNumComplex zold, MpfrBigNumComplex zold2, int iterations, MpfrBigNumComplex c, MpfrBigNumComplex start, MpfrBigNumComplex c0, MpfrBigNum norm_squared, MpfrBigNumComplex pixel);

public boolean Escaped(GenericComplex z, GenericComplex zold, GenericComplex zold2, int iterations, GenericComplex c, GenericComplex start, GenericComplex c0, Object norm_squared, GenericComplex pixel) {
if(z instanceof BigNumComplex) {
return escaped((BigNumComplex)z, (BigNumComplex)zold, (BigNumComplex)zold2, iterations, (BigNumComplex)c, (BigNumComplex)start, (BigNumComplex)c0, (BigNum) norm_squared, (BigNumComplex)pixel);
}
else {
else if(z instanceof MpfrBigNumComplex) {
return escaped((MpfrBigNumComplex)z, (MpfrBigNumComplex)zold, (MpfrBigNumComplex)zold2, iterations, (MpfrBigNumComplex)c, (MpfrBigNumComplex)start, (MpfrBigNumComplex)c0, (MpfrBigNum) norm_squared, (MpfrBigNumComplex)pixel);
}
else if (z instanceof BigComplex) {
return escaped((BigComplex)z, (BigComplex)zold, (BigComplex)zold2, iterations, (BigComplex)c, (BigComplex)start, (BigComplex)c0, (Apfloat) norm_squared, (BigComplex)pixel);
}
else if (z instanceof DDComplex) {
return escaped((DDComplex)z, (DDComplex)zold, (DDComplex)zold2, iterations, (DDComplex)c, (DDComplex)start, (DDComplex)c0, (DoubleDouble) norm_squared, (DDComplex)pixel);
}
else {
return escaped((Complex) z, (Complex)zold, (Complex)zold2, iterations, (Complex)c, (Complex)start, (Complex)c0, (double) norm_squared, (Complex)pixel);
}
}

public int getId() {
Expand Down
18 changes: 14 additions & 4 deletions src/fractalzoomer/bailout_conditions/CircleBailoutCondition.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,8 @@
*/
package fractalzoomer.bailout_conditions;

import fractalzoomer.core.BigComplex;
import fractalzoomer.core.BigNum;
import fractalzoomer.core.BigNumComplex;
import fractalzoomer.core.Complex;
import fractalzoomer.core.*;
import fractalzoomer.core.mpfr.MpfrBigNum;
import org.apfloat.Apfloat;


Expand Down Expand Up @@ -53,5 +51,17 @@ public boolean escaped(BigComplex z, BigComplex zold, BigComplex zold2, int iter
public boolean escaped(BigNumComplex z, BigNumComplex zold, BigNumComplex zold2, int iterations, BigNumComplex c, BigNumComplex start, BigNumComplex c0, BigNum norm_squared, BigNumComplex pixel) {
return z.norm_squared().compare(bnbound) >= 0;
}

@Override
public boolean escaped(MpfrBigNumComplex z, MpfrBigNumComplex zold, MpfrBigNumComplex zold2, int iterations, MpfrBigNumComplex c, MpfrBigNumComplex start, MpfrBigNumComplex c0, MpfrBigNum norm_squared, MpfrBigNumComplex pixel) {
return z.norm_squared().compare(bound) >= 0;
}

@Override
public boolean escaped(DDComplex z, DDComplex zold, DDComplex zold2, int iterations, DDComplex c, DDComplex start, DDComplex c0, DoubleDouble norm_squared, DDComplex pixel) {

return z.norm_squared().compareTo(ddcbound) >= 0;

}

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package fractalzoomer.bailout_conditions;

import fractalzoomer.core.BigComplex;
import fractalzoomer.core.BigNum;
import fractalzoomer.core.BigNumComplex;
import fractalzoomer.core.Complex;
import fractalzoomer.core.*;
import fractalzoomer.core.mpfr.MpfrBigNum;
import org.apfloat.Apfloat;

public class CircleBailoutPreCalcNormCondition extends BailoutCondition {
Expand Down Expand Up @@ -32,4 +30,16 @@ public boolean escaped(BigComplex z, BigComplex zold, BigComplex zold2, int iter
public boolean escaped(BigNumComplex z, BigNumComplex zold, BigNumComplex zold2, int iterations, BigNumComplex c, BigNumComplex start, BigNumComplex c0, BigNum norm_squared, BigNumComplex pixel) {
return norm_squared.compare(bnbound) >= 0;
}

@Override
public boolean escaped(MpfrBigNumComplex z, MpfrBigNumComplex zold, MpfrBigNumComplex zold2, int iterations, MpfrBigNumComplex c, MpfrBigNumComplex start, MpfrBigNumComplex c0, MpfrBigNum norm_squared, MpfrBigNumComplex pixel) {
return norm_squared.compare(bound) >= 0;
}

@Override
public boolean escaped(DDComplex z, DDComplex zold, DDComplex zold2, int iterations, DDComplex c, DDComplex start, DDComplex c0, DoubleDouble norm_squared, DDComplex pixel) {

return norm_squared.compareTo(ddcbound) >= 0;

}
}
18 changes: 14 additions & 4 deletions src/fractalzoomer/bailout_conditions/CrossBailoutCondition.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,8 @@
*/
package fractalzoomer.bailout_conditions;

import fractalzoomer.core.BigComplex;
import fractalzoomer.core.BigNum;
import fractalzoomer.core.BigNumComplex;
import fractalzoomer.core.Complex;
import fractalzoomer.core.*;
import fractalzoomer.core.mpfr.MpfrBigNum;
import org.apfloat.Apfloat;

/**
Expand Down Expand Up @@ -52,5 +50,17 @@ public boolean escaped(BigComplex z, BigComplex zold, BigComplex zold2, int iter
public boolean escaped(BigNumComplex z, BigNumComplex zold, BigNumComplex zold2, int iterations, BigNumComplex c, BigNumComplex start, BigNumComplex c0, BigNum norm_squared, BigNumComplex pixel) {
return z.getAbsRe().compare(bnbound) >= 0 && z.getAbsIm().compare(bnbound) >= 0;
}

@Override
public boolean escaped(MpfrBigNumComplex z, MpfrBigNumComplex zold, MpfrBigNumComplex zold2, int iterations, MpfrBigNumComplex c, MpfrBigNumComplex start, MpfrBigNumComplex c0, MpfrBigNum norm_squared, MpfrBigNumComplex pixel) {
return z.getAbsRe().compare(bound) >= 0 && z.getAbsIm().compare(bound) >= 0;
}

@Override
public boolean escaped(DDComplex z, DDComplex zold, DDComplex zold2, int iterations, DDComplex c, DDComplex start, DDComplex c0, DoubleDouble norm_squared, DDComplex pixel) {

return z.getAbsRe().compareTo(ddcbound) >= 0 && z.getAbsIm().compareTo(ddcbound) >= 0;

}

}
18 changes: 14 additions & 4 deletions src/fractalzoomer/bailout_conditions/CustomBailoutCondition.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package fractalzoomer.bailout_conditions;

import fractalzoomer.core.BigComplex;
import fractalzoomer.core.BigNum;
import fractalzoomer.core.BigNumComplex;
import fractalzoomer.core.Complex;
import fractalzoomer.core.*;
import fractalzoomer.core.mpfr.MpfrBigNum;
import org.apfloat.Apfloat;

public class CustomBailoutCondition extends BailoutCondition {
Expand Down Expand Up @@ -32,4 +30,16 @@ public boolean escaped(BigComplex z, BigComplex zold, BigComplex zold2, int iter
public boolean escaped(BigNumComplex z, BigNumComplex zold, BigNumComplex zold2, int iterations, BigNumComplex c, BigNumComplex start, BigNumComplex c0, BigNum norm_squared, BigNumComplex pixel) {
return z.toComplex().norm() >= bound;
}

@Override
public boolean escaped(MpfrBigNumComplex z, MpfrBigNumComplex zold, MpfrBigNumComplex zold2, int iterations, MpfrBigNumComplex c, MpfrBigNumComplex start, MpfrBigNumComplex c0, MpfrBigNum norm_squared, MpfrBigNumComplex pixel) {
return z.norm().compare(bound) >= 0;
}

@Override
public boolean escaped(DDComplex z, DDComplex zold, DDComplex zold2, int iterations, DDComplex c, DDComplex start, DDComplex c0, DoubleDouble norm_squared, DDComplex pixel) {

return z.norm().compareTo(ddcbound) >= 0;

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package fractalzoomer.bailout_conditions;

import fractalzoomer.core.*;
import fractalzoomer.core.mpfr.MpfrBigNum;
import org.apfloat.Apfloat;

/**
Expand Down Expand Up @@ -63,5 +64,31 @@ public boolean escaped(BigNumComplex z, BigNumComplex zold, BigNumComplex zold2,
return false;

}

@Override
public boolean escaped(MpfrBigNumComplex z, MpfrBigNumComplex zold, MpfrBigNumComplex zold2, int iterations, MpfrBigNumComplex c, MpfrBigNumComplex start, MpfrBigNumComplex c0, MpfrBigNum norm_squared, MpfrBigNumComplex pixel) {
MpfrBigNum zoldRe = zold.getRe();
MpfrBigNum zoldIm = zold.getIm();

if(iterations > 1 && (zoldRe.compare(0) == 0 || zoldIm.compare(0) == 0)) {
return false;
}

return iterations > 1 && z.getRe().divide(zoldRe).compare(bound) >= 0 && z.getIm().divide(zoldIm).compare(bound) >= 0;
}

@Override
public boolean escaped(DDComplex z, DDComplex zold, DDComplex zold2, int iterations, DDComplex c, DDComplex start, DDComplex c0, DoubleDouble norm_squared, DDComplex pixel) {

DoubleDouble zoldRe = zold.getRe();
DoubleDouble zoldIm = zold.getIm();

if(iterations > 1 && (zoldRe.compareTo(0) == 0 || zoldIm.compareTo(0) == 0)) {
return false;
}

return iterations > 1 && z.getRe().divide(zoldRe).compareTo(ddcbound) >= 0 && z.getIm().divide(zoldIm).compareTo(ddcbound) >= 0;

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,8 @@
*/
package fractalzoomer.bailout_conditions;

import fractalzoomer.core.BigComplex;
import fractalzoomer.core.BigNum;
import fractalzoomer.core.BigNumComplex;
import fractalzoomer.core.Complex;
import fractalzoomer.core.*;
import fractalzoomer.core.mpfr.MpfrBigNum;
import org.apfloat.Apfloat;


Expand Down Expand Up @@ -53,5 +51,17 @@ public boolean escaped(BigComplex z, BigComplex zold, BigComplex zold2, int iter
public boolean escaped(BigNumComplex z, BigNumComplex zold, BigNumComplex zold2, int iterations, BigNumComplex c, BigNumComplex start, BigNumComplex c0, BigNum norm_squared, BigNumComplex pixel) {
return z.getRe().compare(bnbound) >= 0;
}

@Override
public boolean escaped(MpfrBigNumComplex z, MpfrBigNumComplex zold, MpfrBigNumComplex zold2, int iterations, MpfrBigNumComplex c, MpfrBigNumComplex start, MpfrBigNumComplex c0, MpfrBigNum norm_squared, MpfrBigNumComplex pixel) {
return z.getRe().compare(bound) >= 0;
}

@Override
public boolean escaped(DDComplex z, DDComplex zold, DDComplex zold2, int iterations, DDComplex c, DDComplex start, DDComplex c0, DoubleDouble norm_squared, DDComplex pixel) {

return z.getRe().compareTo(ddcbound) >= 0;

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,8 @@
*/
package fractalzoomer.bailout_conditions;

import fractalzoomer.core.BigComplex;
import fractalzoomer.core.BigNum;
import fractalzoomer.core.BigNumComplex;
import fractalzoomer.core.Complex;
import fractalzoomer.core.*;
import fractalzoomer.core.mpfr.MpfrBigNum;
import org.apfloat.Apfloat;

/**
Expand Down Expand Up @@ -52,5 +50,17 @@ public boolean escaped(BigComplex z, BigComplex zold, BigComplex zold2, int iter
public boolean escaped(BigNumComplex z, BigNumComplex zold, BigNumComplex zold2, int iterations, BigNumComplex c, BigNumComplex start, BigNumComplex c0, BigNum norm_squared, BigNumComplex pixel) {
return z.getAbsIm().compare(bnbound) >= 0;
}

@Override
public boolean escaped(MpfrBigNumComplex z, MpfrBigNumComplex zold, MpfrBigNumComplex zold2, int iterations, MpfrBigNumComplex c, MpfrBigNumComplex start, MpfrBigNumComplex c0, MpfrBigNum norm_squared, MpfrBigNumComplex pixel) {
return z.getAbsIm().compare(bound) >= 0;
}

@Override
public boolean escaped(DDComplex z, DDComplex zold, DDComplex zold2, int iterations, DDComplex c, DDComplex start, DDComplex c0, DoubleDouble norm_squared, DDComplex pixel) {

return z.getAbsIm().compareTo(ddcbound) >= 0;

}

}
43 changes: 41 additions & 2 deletions src/fractalzoomer/bailout_conditions/NNormBailoutCondition.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
package fractalzoomer.bailout_conditions;

import fractalzoomer.core.*;
import fractalzoomer.core.mpfr.LibMpfr;
import fractalzoomer.core.mpfr.MpfrBigNum;
import org.apfloat.Apcomplex;
import org.apfloat.Apfloat;

Expand All @@ -28,13 +30,27 @@
public class NNormBailoutCondition extends BailoutCondition {
protected double n_norm;
protected Apfloat ddn_norm;
protected MpfrBigNum mpfrbn_norm;

protected DoubleDouble dddn_norm;

public NNormBailoutCondition(double bound, double n_norm) {

super(bound);
this.n_norm = n_norm;
ddn_norm = new MyApfloat(n_norm);


if(ThreadDraw.PERTURBATION_THEORY) {
ddn_norm = new MyApfloat(n_norm);
dddn_norm = new DoubleDouble(n_norm);

if(ThreadDraw.USE_BIGNUM_FOR_REF_IF_POSSIBLE) {

if(LibMpfr.LOAD_ERROR == null) {
mpfrbn_norm = new MpfrBigNum(n_norm);
}
}
}

}

@Override //N norm
Expand All @@ -57,7 +73,30 @@ public boolean escaped(BigComplex z, BigComplex zold, BigComplex zold2, int iter

@Override
public boolean escaped(BigNumComplex z, BigNumComplex zold, BigNumComplex zold2, int iterations, BigNumComplex c, BigNumComplex start, BigNumComplex c0, BigNum norm_squared, BigNumComplex pixel) {
if(n_norm == 0) {
return false;
}
return z.toComplex().nnorm(n_norm) >= bound;
}

@Override
public boolean escaped(MpfrBigNumComplex z, MpfrBigNumComplex zold, MpfrBigNumComplex zold2, int iterations, MpfrBigNumComplex c, MpfrBigNumComplex start, MpfrBigNumComplex c0, MpfrBigNum norm_squared, MpfrBigNumComplex pixel) {
if(mpfrbn_norm.isZero()) {
return false;
}

return z.nnorm(mpfrbn_norm).compare(bound) >= 0;
}

@Override
public boolean escaped(DDComplex z, DDComplex zold, DDComplex zold2, int iterations, DDComplex c, DDComplex start, DDComplex c0, DoubleDouble norm_squared, DDComplex pixel) {

if(dddn_norm.isZero()) {
return false;
}

return z.nnorm(dddn_norm).compareTo(ddcbound) >= 0;

}
}

Loading

0 comments on commit 9a21243

Please sign in to comment.