先是在顾森的博客 看到这个,一时技痒就写了一个。
point = {{{1/3, 1/2}, {2/3, 1/2}}};
diedai[point_] := Block[{mid, dis, point1, point2, point3, point4},
mid = [email protected];
dis = EuclideanDistance @@ point;
point1 = mid + {-3*(1/2 - 1/9)*dis, -3/4*dis};(*左点*)
point2 = mid + {-3*(1/2 - 2/9)*dis, -3/4*dis};(*右点*)
point3 = 2*mid - point1;
point4 = 2*mid - point2;
Return[{{point1, point2}, {point3, point4}, point}];
]
Graphics[[email protected][[email protected][diedai /@ #, 1] &, point, 7],
AxesOrigin -> {0, 0},
PlotRange -> {{0, 1}, {0, 1}},
Axes -> True]
然后又做了个在线版的
总结:一个很简单的多映射压缩迭代。、
然后 Flyz 巨佬给了递归版
cantor[x_, n_, z_, low_, upp_] :=
Block[{t},
If[x < (t = 2/3 low + 1/3 upp), cantor[x, n + 1, z - 1/2^n, low, t],
If[x > (t = 1/3 low + 2/3 upp),
cantor[x, n + 1, z + 1/2^n, t, upp], z]]]
cantor[x_] := cantor[x, 2, .5, 0, 1];
Plot[cantor[x], {x, 0, 1}]
系列迭代版
point = {{{1/3, 1/2}, {2/3, 1/2}}};
次数 = 4;
diedai[point_] :=
Block[{mid, dis, point1, point2, point3, point4}, mid = [email protected];
dis = EuclideanDistance @@ point;
point1 = mid + {-3*(1/2 - 1/9)*dis, -3/4*dis};(*左点*)
point2 = mid + {-3*(1/2 - 2/9)*dis, -3/4*dis};(*右点*)
point3 = 2*mid - point1;
point4 = 2*mid - point2;
Return[{{point1, point2}, {point3, point4}, point}];]
points = NestList[[email protected][diedai /@ #, 1] &, point, 次数』;
Table[{i,
Graphics[[email protected][[i]], AxesOrigin -> {0, 0},
PlotRange -> {{0, 1}, {0, 1}}, Axes -> True]}, {i, 1,
次数}] // TableForm
最后发现 Mathematica 已经有内置的 CantorStaircase
函数了。
近期评论