Если у вас математический склад ума и вы все видите через призму уравнений и их отображений на плоскость, то у меня есть кое-что, способное заинтересовать и надолго приковать вас к экрану, особенно когда нечего делать. Впрочем, даже если вышеупомянутое вам чуждо, то все равно наблюдение за простейшей хаотической системой, которую я случайно нашел на просторах интернета, способно вас позабавить и скрасить время, убив его на изучение преобразований точек.
Возьмем вот такую итеративную систему уравнений:
X' = integer(Y - sqrt(abs(b * X - c))) - 100
Y' = a - X
где X, Y - начальные точки (т.е точки до преобразований),
X', Y' - точки после преобразований
А чтобы сделать программку интереснее, доверим ей самой выбирать параметры, а также заставим программу менять цвет точки в зависимости от того, какая по счету итерация произошла.
Нетрудно заметить, что вид рисунка, который получится в итоге, определяется тремя параметрами: a, b и с, и совершенно не зависит от начальной точки, в качестве которой мы возьмем точку с координатами (100; 100) – и отталкиваясь от этого, а также случайных значений параметров, получим следующую программку:
link graphics,random
procedure main()
local W,i
W:=WOpen("size=600,600")
x := 100
y := 100
i := 1
randomize()
a := ?200
b := ?200
c := ?200
col := ["red","orange","yellow","green","cyan","blue","violet","pink","magenta","purple","lightgreen"]
while i <= 1000 do {
Fg(col[integer(i/100)+1])
DrawString(300 + x, 200 + y, "*")
x1 := x
x := xn(a,b,c,x1,y)
y := yn(a,x1)
i +:= 1
}
Fg("magenta")
DrawString(10,20,"a = " || a)
DrawString(10,40,"b = " || b)
DrawString(10,60,"c = " || c)
WDone()
end
procedure xn(a,b,c,x,y)
return integer(y - sqrt(abs(b*x-c))) - 100
end
procedure yn(a,x)
return a - x
end
Как видно, все в этой программке просто: единственный неочевидный момент - это отрисовка точек с помощью DrawString, что довольно легко объяснить - отрисовка с помощью символа "*" гораздо более наглядна и красива (в чем предлагаю вам убедиться самим, заменив DrawString на DrawPoint).
Ну а теперь небольшая галерея полученных мной точек:
[print_gllr id=431 display=short]