Skip to content

Commit 8473810

Browse files
committed
working for checked images now
1 parent 221d61b commit 8473810

File tree

5 files changed

+73
-36
lines changed

5 files changed

+73
-36
lines changed

high_experimental.toml

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
image_width = 1920
22
image_height = 1080
33
rotate = 0
4-
approximation_order = 32
4+
approximation_order = 64
55
glitch_percentage = 0.001
6-
frames = 5
7-
frame_offset = 180
6+
frames = 1
7+
frame_offset = 0
88
zoom_scale = 2.0
99
display_glitches = true
1010
auto_adjust_iterations = true
@@ -14,13 +14,12 @@ export = "png"
1414
# By default this is squared tolerance. 1e-6 works normally, 1.4e-6 is low tolerance.
1515
glitch_tolerance = 1.4e-6
1616

17-
18-
probe_sampling = 3
17+
probe_sampling = 15
1918

2019
# These are experimental options following
2120
experimental = true
2221

2322
# If this is set higher than the maximum iteration value this will cause any additional glitches to be perturbed without series approximation
2423
high_precision_data_interval = 100
25-
valid_iteration_frame_multiplier = 0.95
26-
valid_iteration_probe_multiplier = 0.999
24+
valid_iteration_frame_multiplier = 0.05
25+
valid_iteration_probe_multiplier = 0.005

locations/infinity.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
real = "-1.7693831791955150182138472860854737829057472636547514374655282165278881912647564588361634463895296673044858257818203031574874912384217194031282461951137475212550848062085787454772803303225167998662391124184542743017129214423639793169296754394181656831301342622793541423768572435783910849972056869527305207508191441734781061794290699753174911133714351734166117456520272756159178932042908932465102671790878414664628213755990650460738372283470777870306458882898202604001744348908388844962887074505853707095832039410323454920540534378406083202543002080240776000604510883136400112955848408048692373051275999457470473671317598770623174665886582323619043055508383245744667325990917947929662025877792679499645660786033978548337553694613673529685268652251959453874971983533677423356377699336623705491817104771909424891461757868378026419765129606526769522898056684520572284028039883286225342392455089357242793475261134567912757009627599451744942893765395578578179137375672787942139328379364197492987307203001409779081030965660422490200242892023288520510396495370720268688377880981691988243756770625044756604957687314689241825216171368155083773536285069411856763404065046728379696513318216144607821920824027797857625921782413101273331959639628043420017995090636222818019324038366814798438238540927811909247543259203596399903790614916969910733455656494065224399357601105072841234072044886928478250600986666987837467585182504661923879353345164721140166670708133939341595205900643816399988710049682525423837465035288755437535332464750001934325685009025423642056347757530380946799290663403877442547063918905505118152350633031870270153292586262005851702999524577716844595335385805548908126325397736860678083754587744508953038826602270140731059161305854135393230132058326419325267890909463907657787245924319849651660028931472549400310808097453589135197164989941931054546261747594558823583006437970585216728326439804654662779987947232731036794099604937358361568561860539962449610052967074013449293876425609214167615079422980743121960127425155223407999875999884"
22
imag = "0.00423684791873677221492650717136799707668267091740375727945943565011234400080554515730243099502363650631353268335965257182300494805538736306127524814939292355930892834392050796724887904921986666045576626946900666103494014904714323725586979789908520656683202658064024115300378826789786394641622035341055102900456305723718684527210377325846307917512628774672005693326232806953822796755832517188873479124361430989485495501124096329421682827330693532171505367455526637382706988583456915684673202462211937384523487065290004627037270912806345336469007546411109669407622004367957958476890043040953462048335322273359167297049252960438077167010004209439515213189081508634843224000870136889065895088138204552309352430462782158649681507477960551795646930149740918234645225076516652086716320503880420325704104486903747569874284714830068830518642293591138468762031036739665945023607640585036218668993884533558262144356760232561099772965480869237201581493393664645179292489229735815054564819560512372223360478737722905493126886183195223860999679112529868068569066269441982065315045621648665342365985555395338571505660132833205426100878993922388367450899066133115360740011553934369094891871075717765803345451791394082587084902236263067329239601457074910340800624575627557843183429032397590197231701822237810014080715216554518295907984283453243435079846068568753674073705720148851912173075170531293303461334037951893251390031841730968751744420455098473808572196768667200405919237414872570568499964117282073597147065847005207507464373602310697663458722994227826891841411512573589860255142210602837087031792012000966856067648730369466249241454455795058209627003734747970517231654418272974375968391462696901395430614200747446035851467531667672250261488790789606038203516466311672579186528473826173569678887596534006782882871835938615860588356076208162301201143845805878804278970005959539875585918686455482194364808816650829446335905975254727342258614604501418057192598810476108766922935775177687770187001388743012888530139038318783958771247007926690"
3-
zoom = "5.0E200"
3+
zoom = "5.0E161"
44
iterations = 15000000

locations/triangle.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
real = "-1.25539673868026755865583057881474899884324965805338977974834931161909270753708598428507955786132265725790787341032505996383790425294770009682926760678760038756350899655215102205878644724210739492794886576603695584822056326228944405322883876128043521419784068398650048082189903328094223666928063926518382846840131859485476315478235880711721658003833441256818569046853194430529350784682119536773108833463488393163697761402192429756097387714961858678744874458199522006130576804388906748570341814504336685457587167749548288322872130218471448274839817042698717905831296282896184572296128713908967449798472116056514881888801683939223851000287431323336894442496881378705777070710371054440806027399735639396692322947494320719306470574708085702346217592836955660079971867889777798610664668864742574634950499717744718773283207042687948226229603847906214983193112664398233916204454147724975238550562547821344963081493668638526943588769755260131804899721402074907287731519191451163524738558324798559761025301908168987100951527274712280617758661403864423907751426459851506821125537839398255354437258208725148760906354197699944849968108933608465947163436828331417300771517124475934726602173762300539357803205221245585415774897112143250119426714150301309801319608451015128386035191726911921409455877878074524972060731613571786401216370540706975177651621092906520896665796647089230257511709648826321414635400998938455772429223454925573977621930697636796075847672588969185212087053053108181349608410897392328263641074037370638422842713171865370885525752501270851054922936215247758843441612554173733605068983133288967390278512576317125435856073016415738023888947607111601785315411777998870973224588870831157000745915650340811818424894326691568333333287310663932565094814901141779668577091589977159231317802556812362499811007994432885830314171973035269633162611613719150560321254470550921982493890373265712289506368372242619429278367534066301408804736183112417208921239690694152920285716471700108933703166679275908879135641167270283866791874989692797333223912642355592898942261239801754647548769348903336461818747933068920743148283632266306881018573511463953740275679828863365826198203134232482131820640409927700991821156544305676637683125693206284943518734414060423813465798754462992799430697523597233"
2+
imag = "0.38224857379114731727780160618658277870068837021245609010295408004674654682792434651526067447152075016911712054055366594385153982530268591629940094738282878381005830478368034558265856542451001686964767561086991338229754750137888164432857760503555842214222748025269569910342171779788637618093216751365225088244974732240931656948930320932483314069560030252947914416671414075723933875670577050947611642505633422489719007040329288770428757402243349059412605593643265949963772513244211135482494958912615966962376348986136117109044491259528402746005899258602303394927333974607538059934632921409448592026483942987894561898331313170398847213274560540208498080978196884537151786484867735486753128144430866094488699815209010954095152294908726663605582313599516699642043260982989596201950521373657665888156922245012034452507667911384714233976586046957767863867279164854686440895021022140335576849458186739533079907091119760435026551937347806292204466683044092574239012840186428481524219398943802887008041935819677278927676704522741056396257948015133645827160792737869947636479090032335098323726897300010931435172681809140933116797070843783091397880472133475422388098864490610439426060149139216159026208588057288395717243484806167182597013551312010188295824752786932984887460712578604990706454971450496155631761424072659784071238345487466805278971489867754392033632748812447312563394897601361535407192856390587221545771654081274649187234430101177287585350211747493805773283204901741582650483692607104969109485572537275107060195960439335093314127023513241367490068166620554906791774001717991666159176505400523230151821683091826328729376557926320188766146883076918559315535454082956773400405689949643379087530045232955917580766583998251709877442400316338096059478353544725752163596160773833593059946203114921949849385337925897088224267096835539727189957953695650604725670584459478345615025117820704668603117497969156810146795706772328220444509536691189407404386319819509366133216601247025480866130704549612899154869401996166840596106974136261677011932709383792444954406525867356896445713414748391884204484183065722694821005218717482082087096172332556051444206891571881664322252754694587273228380586639882319729340727003245417557444363395896390486793186299739084951434426861761486920154278237706587"
3+
zoom = "1.4903550178318449484728738200504E2276"
4+
iterations = 15000000

src/math/series_approximation.rs

Lines changed: 53 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ pub struct SeriesApproximation {
1818
pub delta_top_left: ComplexExtended,
1919
pub min_valid_iteration: usize,
2020
pub valid_iterations: Vec<usize>,
21+
pub valid_interpolation: Vec<usize>,
2122
pub probe_sampling: usize,
2223
pub experimental: bool,
2324
pub valid_iteration_frame_multiplier: f32,
@@ -54,6 +55,7 @@ impl SeriesApproximation {
5455
delta_top_left,
5556
min_valid_iteration: 1,
5657
valid_iterations: Vec::new(),
58+
valid_interpolation: Vec::new(),
5759
probe_sampling,
5860
experimental,
5961
valid_iteration_frame_multiplier,
@@ -110,8 +112,9 @@ impl SeriesApproximation {
110112
self.approximation_probes = Vec::new();
111113
self.approximation_probes_derivative = Vec::new();
112114

113-
for i in 0..self.probe_sampling {
114-
for j in 0..self.probe_sampling {
115+
// Probes are stored in row first order
116+
for j in 0..self.probe_sampling {
117+
for i in 0..self.probe_sampling {
115118
let real = (1.0 - 2.0 * (i as f64 / (self.probe_sampling as f64 - 1.0))) * self.delta_top_left.mantissa.re;
116119
let imag = (1.0 - 2.0 * (j as f64 / (self.probe_sampling as f64 - 1.0))) * self.delta_top_left.mantissa.im;
117120

@@ -136,7 +139,14 @@ impl SeriesApproximation {
136139
// We check using the top left probe
137140
let i = 0;
138141

139-
let mut first_valid_iterations = max(1, (self.min_valid_iteration as f32 * self.valid_iteration_frame_multiplier) as usize);
142+
let test_val = max((self.min_valid_iteration as f32 * self.valid_iteration_frame_multiplier) as usize, 1000);
143+
144+
let mut first_valid_iterations = if self.min_valid_iteration > test_val {
145+
self.min_valid_iteration - test_val
146+
} else {
147+
1
148+
};
149+
140150
let mut probe = self.evaluate(self.probe_start[i], first_valid_iterations);
141151

142152
while first_valid_iterations < self.maximum_iteration {
@@ -182,8 +192,19 @@ impl SeriesApproximation {
182192
self.min_valid_iteration = first_valid_iterations;
183193
}
184194

185-
let mut current_probe_check_value = max(1, (self.min_valid_iteration as f32 * self.valid_iteration_probe_multiplier) as usize);
186-
let mut next_probe_check_value = max(1, (current_probe_check_value as f32 * self.valid_iteration_probe_multiplier) as usize);
195+
let test_val = max((self.min_valid_iteration as f32 * self.valid_iteration_probe_multiplier) as usize, 1000);
196+
197+
let mut current_probe_check_value = if self.min_valid_iteration > test_val {
198+
self.min_valid_iteration - test_val
199+
} else {
200+
1
201+
};
202+
203+
let mut next_probe_check_value = if current_probe_check_value > test_val {
204+
current_probe_check_value - test_val
205+
} else {
206+
1
207+
};
187208

188209
// This is the array that will be iterated
189210
let mut valid_iterations = vec![current_probe_check_value; self.probe_sampling * self.probe_sampling];
@@ -256,12 +277,37 @@ impl SeriesApproximation {
256277
break;
257278
} else {
258279
current_probe_check_value = next_probe_check_value;
259-
next_probe_check_value = (current_probe_check_value as f32 * self.valid_iteration_probe_multiplier) as usize;
260-
// println!("{:?}, {}, {}", valid_iterations, self.min_valid_iteration, current_probe_check_value);
280+
281+
let test_val = max((self.min_valid_iteration as f32 * self.valid_iteration_probe_multiplier) as usize, 1000);
282+
283+
next_probe_check_value = if current_probe_check_value > test_val {
284+
current_probe_check_value - test_val
285+
} else {
286+
1
287+
};
288+
// println!("{:?}, {}, {}, {}", valid_iterations, self.min_valid_iteration, current_probe_check_value, next_probe_check_value);
261289
}
262290
}
263291

264292
self.valid_iterations = valid_iterations;
293+
294+
// Also, here we do the interpolation and set up the array
295+
self.valid_interpolation = Vec::new();
296+
297+
for j in 0..(self.probe_sampling - 1) {
298+
for i in 0..(self.probe_sampling - 1) {
299+
// this is the index into the main array
300+
let index = j * self.probe_sampling + i;
301+
302+
let min_interpolation = [self.valid_iterations[index],
303+
self.valid_iterations[index + 1],
304+
self.valid_iterations[index + self.probe_sampling],
305+
self.valid_iterations[index + self.probe_sampling + 1]].iter().min().unwrap().clone();
306+
307+
self.valid_interpolation.push(min_interpolation);
308+
}
309+
}
310+
265311
} else {
266312
// Possible how to add the roots as probes
267313

src/renderer.rs

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ impl FractalRenderer {
4949
let probe_sampling = settings.get_int("probe_sampling").unwrap_or(3) as usize;
5050
let remove_centre = settings.get_bool("remove_centre").unwrap_or(true);
5151
let iteration_division = settings.get_float("iteration_division").unwrap_or(0.1) as f32;
52-
let valid_iteration_frame_multiplier = settings.get_float("valid_iteration_frame_multiplier").unwrap_or(0.75) as f32;
53-
let valid_iteration_probe_multiplier = settings.get_float("valid_iteration_probe_multiplier").unwrap_or(0.98) as f32;
52+
let valid_iteration_frame_multiplier = settings.get_float("valid_iteration_frame_multiplier").unwrap_or(0.25) as f32;
53+
let valid_iteration_probe_multiplier = settings.get_float("valid_iteration_probe_multiplier").unwrap_or(0.02) as f32;
5454
let glitch_tolerance = settings.get_float("glitch_tolerance").unwrap_or(1.4e-6) as f64;
5555
let high_precision_data_interval = settings.get_int("high_precision_data_interval").unwrap_or(100) as usize;
5656

@@ -210,15 +210,9 @@ impl FractalRenderer {
210210
let test1 = ((self.series_approximation.probe_sampling - 1) as f64 * i as f64 / self.image_width as f64).floor() as usize;
211211
let test2 = ((self.series_approximation.probe_sampling - 1) as f64 * j as f64 / self.image_height as f64).floor() as usize;
212212

213-
let pos1 = test1 * self.series_approximation.probe_sampling + test2;
214-
let pos2 = test1 * self.series_approximation.probe_sampling + test2 + 1;
215-
let pos3 = test1 * self.series_approximation.probe_sampling + test2 + self.series_approximation.probe_sampling;
216-
let pos4 = test1 * self.series_approximation.probe_sampling + test2 + self.series_approximation.probe_sampling + 1;
213+
let index = test2 * (self.series_approximation.probe_sampling - 1) + test1;
217214

218-
[self.series_approximation.valid_iterations[pos1],
219-
self.series_approximation.valid_iterations[pos2],
220-
self.series_approximation.valid_iterations[pos3],
221-
self.series_approximation.valid_iterations[pos4]].iter().min().unwrap().clone()
215+
self.series_approximation.valid_interpolation[index]
222216
} else {
223217
self.series_approximation.min_valid_iteration
224218
};
@@ -269,23 +263,17 @@ impl FractalRenderer {
269263
correction_references += 1;
270264
glitch_reference.run();
271265

272-
// Experimental but does not work very well. There are a few glitches that still happen with this
266+
// Experimental but does not work very well. There are quite a few glitches that still happen with this
273267
if false {
274268
pixel_data.par_iter_mut()
275269
.for_each(|pixel| {
276270
let chosen_iteration = {
277271
let test1 = ((self.series_approximation.probe_sampling - 1) as f64 * pixel.image_x as f64 / self.image_width as f64).floor() as usize;
278272
let test2 = ((self.series_approximation.probe_sampling - 1) as f64 * pixel.image_y as f64 / self.image_height as f64).floor() as usize;
279-
280-
let pos1 = test1 * self.series_approximation.probe_sampling + test2;
281-
let pos2 = test1 * self.series_approximation.probe_sampling + test2 + 1;
282-
let pos3 = test1 * self.series_approximation.probe_sampling + test2 + self.series_approximation.probe_sampling;
283-
let pos4 = test1 * self.series_approximation.probe_sampling + test2 + self.series_approximation.probe_sampling + 1;
284-
285-
[self.series_approximation.valid_iterations[pos1],
286-
self.series_approximation.valid_iterations[pos2],
287-
self.series_approximation.valid_iterations[pos3],
288-
self.series_approximation.valid_iterations[pos4]].iter().min().unwrap().clone()
273+
274+
let index = test2 * (self.series_approximation.probe_sampling - 1) + test1;
275+
276+
self.series_approximation.valid_interpolation[index]
289277
};
290278

291279
let delta_current_reference = self.series_approximation.evaluate(glitch_reference_pixel.delta_centre, chosen_iteration);

0 commit comments

Comments
 (0)