Если у вас математический склад ума и вы все видите через призму уравнений и их отображений на плоскость, то у меня есть кое-что, способное заинтересовать и надолго приковать вас к экрану, особенно когда нечего делать. Впрочем, даже если вышеупомянутое вам чуждо, то все равно наблюдение за простейшей хаотической системой, которую я случайно нашел на просторах интернета, способно вас позабавить и скрасить время, убив его на изучение преобразований точек.
Возьмем вот такую итеративную систему уравнений:
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]