yup
This commit is contained in:
parent
bdd9098d28
commit
5c81993668
4 changed files with 71 additions and 54 deletions
|
|
@ -1,32 +1,31 @@
|
||||||
{{{1., 0., 0., 0., 0., 0., 0., 0.}, {0., 1., 0., 0., 0., 0., 0.,
|
{{{2., 1., 2.8284271247461903, 0.}, {1., 2.,
|
||||||
0.}, {1., 3., 0., -1., 2., 0., 0., 0.}, {2., 2., 0., -1., 2., 0.,
|
2.8284271247461903,
|
||||||
0., 0.}, {0., 0., 0., 0., 1., 0., 0., 0.}, {-1., 1., 0., 0., 1.,
|
0.}, {-1.4142135623730951, -1.4142135623730951, -3.,
|
||||||
0., 0., 0.}, {0., 3., 0., -1., 3., 0., 0., 0.}, {1., 2., 0., -1.,
|
0.}, {0., 0., 0., 1.}}, {{18., 1., 8.485281374238571,
|
||||||
3., 0., 0., 0.}}, {{1., 0., 0., 0., 0., 0., 0., 0.}, {1., 0.,
|
0.}, {289., 18., 144.2497833620557,
|
||||||
1., -1., 0., 0., 0., 0.}, {0., 0., 1., 0., 0., 0., 0., 0.}, {0.,
|
0.}, {-72.12489168102785, -4.242640687119286, -35., 0.}, {0.,
|
||||||
0., 0., 1., 0., 0., 0., 0.}, {4., 0., 2., 0., -1., 0., 0.,
|
0., 0., 1.}}, {{1., 0., 0., 0.}, {4., 1.,
|
||||||
0.}, {4., 0., 3., -1., -1., 0., 0., 0.}, {3., 0., 3., 0., -1., 0.,
|
0., -4.}, {0., 0., 1., 0.}, {2., 0., 0., -1.}}, {{1.,
|
||||||
0., 0.}, {3., 0., 2., 1., -1., 0., 0., 0.}}, {{1., 0., 0., 0., 0.,
|
0., 0., 0.}, {4., 1., 0., 4.}, {0., 0., 1., 0.}, {-2.,
|
||||||
0., 0., 0.}, {4., -1., 0., 0., 0., 0., 0., 2.}, {4., -1., 0.,
|
0., 0., -1.}}, {{33., 4., 22.627416997969522, 4.}, {256.,
|
||||||
0., -1., 0., 0., 3.}, {1., 0., 0., 0., -1., 0., 0., 1.}, {0., 0.,
|
33., 181.01933598375618,
|
||||||
0., 0., 1., 0., 0., 0.}, {3., -1., 0., 0., 1., 0., 0.,
|
32.}, {-90.50966799187809, -11.313708498984761, -63.,
|
||||||
2.}, {3., -1., 0., 0., 0., 0., 0., 3.}, {0., 0., 0., 0., 0., 0.,
|
-11.313708498984761}, {-16., -2., -11.313708498984761, -1.}},
|
||||||
0., 1.}}, {{-1., 2., 2., 0., 0., 2., 0., 0.}, {0., 1., 0., 0., 0.,
|
{{33., 4., 22.627416997969522, -4.}, {256., 33.,
|
||||||
0., 0., 0.}, {0., 0., 1., 0., 0., 0., 0., 0.}, {-1., 1., 3., 0.,
|
181.01933598375618, -32.}, {-90.50966799187809,
|
||||||
0., 2., 0., 0.}, {-1., 1., 2., 0., 0., 3., 0., 0.}, {0., 0., 0.,
|
-11.313708498984761, -63., 11.313708498984761}, {16., 2.,
|
||||||
0., 0., 1., 0., 0.}, {0., -1., 1., 0., 0., 1., 0., 0.}, {-1., 0.,
|
11.313708498984761, -1.}}}
|
||||||
3., 0., 0., 3., 0., 0.}}, {{0., -1., 0., 4., 0., 0.,
|
|
||||||
3., -1.}, {0., -1., 0., 4., 0., 0., 4., -2.}, {0., 0., 0., 1., 0.,
|
|
||||||
0., 1., -1.}, {0., 0., 0., 1., 0., 0., 0., 0.}, {0., -1., 0., 3.,
|
|
||||||
0., 0., 3., 0.}, {0., -1., 0., 3., 0., 0., 4., -1.}, {0., 0., 0.,
|
|
||||||
0., 0., 0., 1., 0.}, {0., 0., 0., 0., 0., 0., 0., 1.}}, {{0., -1.,
|
|
||||||
0., 0., 0., 4., -1., 3.}, {0., -1., 0., 0., 0., 4., 0.,
|
|
||||||
2.}, {0., -1., 0., 0., 0., 3., 1., 2.}, {0., -1., 0., 0., 0., 3.,
|
|
||||||
0., 3.}, {0., 0., 0., 0., 0., 1., -1., 1.}, {0., 0., 0., 0., 0.,
|
|
||||||
1., 0., 0.}, {0., 0., 0., 0., 0., 0., 1., 0.}, {0., 0., 0., 0., 0.,
|
|
||||||
0., 0., 1.}}}
|
|
||||||
|
|
||||||
{-1, 4, 7, 2, 7, 12, 15, 10}
|
{{0., 8.485281374238571, -1., 0.}, {0., -2.8284271247461903,
|
||||||
|
1., 0.}, {1.4142135623730951, 18.38477631085024, -5.,
|
||||||
|
1.4142135623730951}, {1.4142135623730951,
|
||||||
|
7.0710678118654755, -3.,
|
||||||
|
1.4142135623730951}, {1.4142135623730951,
|
||||||
|
18.38477631085024, -5., -1.4142135623730951},
|
||||||
|
{1.4142135623730951,
|
||||||
|
7.0710678118654755, -3., -1.4142135623730951},
|
||||||
|
{2.8284271247461903, 16.970562748477143, -7.,
|
||||||
|
0.}, {2.8284271247461903, 28.284271247461902, -9., 0.}}
|
||||||
|
|
||||||
{{0, 1, 5, 4}, {0, 3, 2, 1}, {0, 4, 7, 3}, {1, 2, 6, 5}, {2, 3, 7,
|
{{0, 1, 5, 4}, {0, 3, 2, 1}, {0, 4, 7, 3}, {1, 2, 6, 5}, {2, 3, 7,
|
||||||
6}, {4, 5, 6, 7}}
|
6}, {4, 5, 6, 7}}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,28 @@
|
||||||
{{{1.33333, 1.16068, -2.1547, -1.24402}, {0.095729,
|
{{{1.3333333333333333,
|
||||||
1.33333, -0.618802, -0.357266}, {0.309401,
|
1.160683602522959, -2.1547005383792515, -1.2440169358562922},
|
||||||
1.07735, -1., -1.1547}, {0.178633, 0.622008, -1.1547,
|
{0.09572902629932163,
|
||||||
0.333333}}, {{1.33333, 1.16068, 2.1547, -1.24402}, {0.095729,
|
1.3333333333333333, -0.6188021535170058, -0.3572655899081637},
|
||||||
1.33333, 0.618802, -0.357266}, {-0.309401, -1.07735, -1.,
|
{0.3094010767585029,
|
||||||
1.1547}, {0.178633, 0.622008, 1.1547, 0.333333}}, {{0., 0.25, 0.,
|
1.0773502691896257, -1., -1.1547005383792517},
|
||||||
|
{0.17863279495408185, 0.6220084679281461, -1.1547005383792517,
|
||||||
|
0.3333333333333333}}, {{1.3333333333333333, 1.160683602522959,
|
||||||
|
2.1547005383792515, -1.2440169358562922}, {0.09572902629932163,
|
||||||
|
1.3333333333333333,
|
||||||
|
0.6188021535170058, -0.3572655899081637}, {-0.3094010767585029,
|
||||||
|
-1.0773502691896257, -1.,
|
||||||
|
1.1547005383792517}, {0.17863279495408185, 0.6220084679281461,
|
||||||
|
1.1547005383792517, 0.3333333333333333}}, {{0., 0.25, 0.,
|
||||||
0.}, {4., 0., 0., 0.}, {0., 0., 1., 0.}, {0., 0., 0.,
|
0.}, {4., 0., 0., 0.}, {0., 0., 1., 0.}, {0., 0., 0.,
|
||||||
1.}}, {{1.33333, 1.16068, 0., 2.48803}, {0.095729, 1.33333, 0.,
|
1.}}, {{1.3333333333333333, 1.160683602522959, 0.,
|
||||||
0.714531}, {0., 0., 1., 0.}, {-0.357266, -1.24402, 0., -1.66667}}}
|
2.4880338717125845}, {0.09572902629932163, 1.3333333333333333,
|
||||||
|
0., 0.7145311798163274}, {0., 0., 1.,
|
||||||
|
0.}, {-0.3572655899081637, -1.2440169358562922,
|
||||||
|
0., -1.6666666666666667}}}
|
||||||
|
|
||||||
{{-1.86603, 0.535898, 0., 0.}, {0.288675, 1.1547, 0.,
|
{{1.8660254037844386, -0.5358983848622456, 0.,
|
||||||
1.1547}, {0.288675, 1.1547, 1., -0.57735}, {0.288675,
|
0.}, {0.2886751345948129, 1.1547005383792517, 0.,
|
||||||
1.1547, -1., -0.57735}}
|
1.1547005383792517}, {0.2886751345948129, 1.1547005383792517,
|
||||||
|
1., -0.5773502691896258}, {0.2886751345948129,
|
||||||
|
1.1547005383792517, -1., -0.5773502691896258}}
|
||||||
|
|
||||||
{{1, 2, 3}, {0, 2, 3}, {0, 1, 3}, {0, 1, 2}}
|
{{1, 2, 3}, {0, 2, 3}, {0, 1, 3}, {0, 1, 2}}
|
||||||
|
|
|
||||||
|
|
@ -11,15 +11,15 @@ pub fn fractal_dimension(
|
||||||
n: usize,
|
n: usize,
|
||||||
debug: bool,
|
debug: bool,
|
||||||
generations: usize,
|
generations: usize,
|
||||||
orthogonal_generators: Vec<Vec<usize>>,
|
_orthogonal_generators: Vec<Vec<usize>>,
|
||||||
) -> Result<f64, linregress::Error> {
|
) -> Result<f64, linregress::Error> {
|
||||||
let xs: Vec<f64> = (1..=n)
|
let xs: Vec<f64> = (1..=n)
|
||||||
.map(|x| (x as f64 * upper_bound / (2.0 * n as f64) + upper_bound / 2.0))
|
.map(|x| (x as f64 * upper_bound / (2.0 * n as f64) + upper_bound / 2.0))
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let mut searcher = Searcher::new(&xs, &generators);
|
let mut searcher = Searcher::new(&xs, &generators, generations, root.len() as u64);
|
||||||
for circle in root {
|
for circle in root {
|
||||||
searcher.search(&circle, std::usize::MAX, 0, generations);
|
searcher.search(&circle, std::usize::MAX, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if debug {
|
if debug {
|
||||||
|
|
|
||||||
|
|
@ -4,25 +4,28 @@ pub struct Searcher<'a> {
|
||||||
pub counts: Vec<u64>,
|
pub counts: Vec<u64>,
|
||||||
maxes: &'a Vec<f64>,
|
maxes: &'a Vec<f64>,
|
||||||
generators: &'a Vec<DMatrix<f64>>,
|
generators: &'a Vec<DMatrix<f64>>,
|
||||||
|
max_depth: usize,
|
||||||
|
tolerance: f64,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Searcher<'a> {
|
impl<'a> Searcher<'a> {
|
||||||
pub fn new(maxes: &'a Vec<f64>, generators: &'a Vec<DMatrix<f64>>) -> Self {
|
pub fn new(
|
||||||
|
maxes: &'a Vec<f64>,
|
||||||
|
generators: &'a Vec<DMatrix<f64>>,
|
||||||
|
max_depth: usize,
|
||||||
|
n: u64,
|
||||||
|
) -> Self {
|
||||||
Self {
|
Self {
|
||||||
counts: vec![0; maxes.len()],
|
counts: vec![n; maxes.len()],
|
||||||
maxes,
|
maxes,
|
||||||
generators,
|
generators,
|
||||||
|
max_depth,
|
||||||
|
tolerance: 1e-4,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn search(
|
pub fn search(&mut self, circle: &DVector<f64>, previous_generator: usize, depth: usize) {
|
||||||
&mut self,
|
if self.max_depth > 0 && depth > self.max_depth {
|
||||||
circle: &DVector<f64>,
|
|
||||||
previous_generator: usize,
|
|
||||||
generations: usize,
|
|
||||||
max_generations: usize,
|
|
||||||
) {
|
|
||||||
if generations > max_generations {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (i, generator) in self.generators.iter().enumerate() {
|
for (i, generator) in self.generators.iter().enumerate() {
|
||||||
|
|
@ -31,7 +34,9 @@ impl<'a> Searcher<'a> {
|
||||||
{
|
{
|
||||||
let mut seen = false;
|
let mut seen = false;
|
||||||
for (j, max) in self.maxes.iter().enumerate() {
|
for (j, max) in self.maxes.iter().enumerate() {
|
||||||
if seen || new_circle[1] > circle[1] && circle[1] < *max {
|
if seen
|
||||||
|
|| new_circle[1] - circle[1] > self.tolerance && new_circle[1] < *max
|
||||||
|
{
|
||||||
seen = true;
|
seen = true;
|
||||||
self.counts[j] += 1;
|
self.counts[j] += 1;
|
||||||
}
|
}
|
||||||
|
|
@ -40,7 +45,7 @@ impl<'a> Searcher<'a> {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} // ensure seen is dropped before recursive call to minimize stack frame size
|
} // ensure seen is dropped before recursive call to minimize stack frame size
|
||||||
self.search(&new_circle, i, generations + 1, max_generations);
|
self.search(&new_circle, i, depth + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue