(*iterated function systems in a segment*)
funcionafin1D[scaleX_, translateX_][x_] := scaleX*x + translateX;
AffineMap1D[scaleX_, translateX_][T_List] :=
Map[funcionafin1D[scaleX, translateX][#] &, T];
IFS1D[AF_][T_] := Flatten[Outer[#1[#2] &, AF, T, 1, 1], 1];
IFS1D[{T_TransformationFunction}][pl_List] := Join @@ Through[{T}[pl]]
(*кубосикстер*)
(* Последовательность кубосикстера*)
Cubosixter1Dpoints[genn_] := Module[{gen = genn, aCSint, aCSrev},
aCS[n_] := n 2^(n - 1) + 2 (*размер ребра объемлющего куба*);
dCS[n_] := 2^(n) - 2 (*Размер соединительных вставок*);
lnCS[n_] := aCS[n - 1]/aCS[n] (*коэффициенты масштабирования ISF*);
aCSint = {{1/3}, {2/
3}}; (*границы интервала первой итерации прямой \
последовательности*);
aCSrev = {{0}, {1}}; (*границы интервала первой итерации для \
обратной последовательности*);
afnCSr[n_] := {AffineMap1D[lnCS[n], 0],
AffineMap1D[-lnCS[n],
1]}; (*функции nISF для кубосикстера через отражения*);
afnCSt[n_] := {AffineMap1D[lnCS[n], 0],
AffineMap1D[
lnCS[n], (aCS[n - 1] + dCS[n - 1])/
aCS[n]]}; (*функции nISF для кубосикстера через трансляции*);
ifsCSr =
Table[IFS1D[afnCSr[n]], {n, 2,
gen}];(*nISF для кубосикстера через отражения*);
ifsCSt =
Table[IFS1D[afnCSt[n]], {n, 2,
gen}];(*nISF для кубосикстера через трансляции*);
ifsCSbacw =
Table[IFS1D[afnCSr[gen - n]], {n, 0,
gen - 2}];(*Обратная последовательность nISF для кубосикстера \
через отражения*);
pointsCSr = Sort[ComposeList[ifsCSr, aCSint][[-1]]];
pointsCSt = Sort[ComposeList[ifsCSt, aCSint][[-1]]];
pointsCSbacw =
Sort[ComposeList[ifsCSbacw, aCSrev][[-1]]]; {pointsCSr, pointsCSt,
DeleteCases[pointsCSbacw, {1/2}]}]
CuboFractalPlot[points_] :=
Module[{ls = points, K3bm, Iobm, region1, region2, region3},
K3bm = BoundaryMeshRegion[ls,
Table[Point[{2 i - 1, 2 i}], {i, 1, Length[ls]/2}]];
Iobm = BoundaryMeshRegion[{{0}, {1}}, Point[{1, 2}]];
region1 = RegionProduct[K3bm, K3bm, Iobm];
region2 = RegionProduct[K3bm, Iobm, K3bm];
region3 = RegionProduct[Iobm, K3bm, K3bm];
Show[Region[region1, Axes -> True], Region[region2, Axes -> True],
Region[region3, Axes -> True]]]
(*Example*)
{pr, pt, pb} = Cubosixter1Dpoints[4];
CuboFractalPlot[pt]