![]() |
Матрица статей Список статей Всячина Контакты | ||||||||||||
|
Одномерное множество Кантора Георг Кантор (1845-1918) явился одним из
основателей теории множеств. Он также придумал один из старейших фракталов - множество
Кантора (описано им в 1883). На Западе подобные множества называют иногда пылью.
Заметим, что существование этого фрактала отмечалось до этого Генри Смитом в 1875 году
или еще ранее. Это множество хорошо известно как пример множества нулевой меры Лебега, чья мощность равна мощности континуума
Способ построения этого множества следующий. Берётся отрезок прямой единичной длины. Затем он делится на три равные части, и вынимается средний отрезок. Это первый шаг итерационной процедуры. На втором шаге подобной процедуре деления на три равные части и последующего удаления середины подвергается каждый из двух оставшихся отрезков. Так продолжая до бесконечности, получим множество Кантора. Нетрудно заметить, что суммарная длина получившихся в пределе отрезков равна нулю, так кам мы исключили в результате длину, равную 1: program Cantor1; uses CRT, Graph; const min = 1; var gd, gm : Integer; procedure Draw(x, y : Real; Size : Real); var s : Real; begin if size > min then begin s := size / 3; Draw(x, y + 20, s); Draw(x + s * 2, y + 20, s); end; Bar(Round(x), Round(y), Round(x + size), Round(y + 5)); end; begin gd := Detect; InitGraph(gd,gm,''); Draw(10,30,500); ReadKey; CloseGraph; end. Можно также построить гребень Кантора. Для его построения нужно в предыдущей программе строчку Bar(Round(x), Round(y), Round(x + size), Round(y + 5));заменить на Rectangle(Round(x), Round(y), Round(x + size), Round(y + 20));
Проведём построение более формально на
множестве. Берём отрезок единичной длины
Множество Кантора имеет мощность континуума.
Для этого необходимо установить взаимно однозначное соответствие между точками из множества Кантора и точками отрезка
Непосредственно с множеством Кантора связана чёртова лестница.
program ChL; uses Crt, Graph; const max = 2187; var gd, gm : Integer; C : array [0..max] of Integer; i : Integer; x, y : Integer; procedure Draw(x: Integer; L: Word); var s : Word; begin if L > 0 then begin s := L div 3; Draw(x, s); Draw(x + 2*L, s); end else C[x] := 1; end; Begin gd := Detect; for i:=0 to max do C[i] := 0; InitGraph(gd,gm,'c:\bp\bgi'); Draw(0, max); for i := 1 to max do C[i] := C[i-1] + C[i]; for i := 0 to max do begin x := Round(i/max*639); y := Round(C[i]/C[max]*479); Line(x, 479, x, 479 - y); end; ReadKey; CloseGraph; end. Смотрите также: Ссылки:
|