⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fractal.lefty

📁 Graphviz - Graph Drawing Programs from AT&T Research and Lucent Bell Labs See doc/build.html for
💻 LEFTY
字号:
load ('def.lefty');definit ();## initialize window data#canvas = defcanvas;wrect = [0 = ['x' = 0; 'y' = 0;]; 1 = ['x' = 400; 'y' = 500;];];setwidgetattr (canvas, ['window' = wrect;]);sq = function (x) {    return x * x;};# data structures#length = 300;center = ['x' = 200; 'y' = 250;];radius = 2 * length / sqrt (12);fractalangle = 0;maxlevel = 2;# drawing functions## draw a Koch curve (a ``snowflake'' fractal)## start with a triangle and keep replacing edges# with the construct: _/\_# until the recursion level reaches 'maxlevel'#fractal = function (level, length, angle) {    local nlength, newpenpos;    if (level >= maxlevel) {        newpenpos.x = penpos.x + length * cos (angle);        newpenpos.y = penpos.y + length * sin (angle);        line (canvas, null, penpos, newpenpos, ['color' = 1;]);        penpos = newpenpos;        return;    }    nlength = length / 3;    fractal (level + 1, nlength, angle);    fractal (level + 1, nlength, angle + 60);    fractal (level + 1, nlength, angle - 60);    fractal (level + 1, nlength, angle);};drawfractal = function () {    clear (canvas);    setpick (canvas, center, wrect);    penpos = [        'x' = center.x + cos (fractalangle + 210) * radius;        'y' = center.y + sin (fractalangle + 210) * radius;    ];    fractal (0, length, fractalangle +  60);    fractal (0, length, fractalangle -  60);    fractal (0, length, fractalangle - 180);    remove ('penpos');};# editing functions## transform the fractal.## map point 'prevpoint' to point 'currpoint'# with respect to the center of the fractal.#transformfractal = function (prevpoint, currpoint) {    local prevtan, currtan, prevradius, currradius;    prevtan = atan (prevpoint.y - center.y, prevpoint.x - center.x);    currtan = atan (currpoint.y - center.y, currpoint.x - center.x);    fractalangle = fractalangle + (currtan - prevtan);    prevradius = sqrt (        sq (prevpoint.y - center.y) + sq (prevpoint.x - center.x)    );    currradius = sqrt (        sq (currpoint.y - center.y) + sq (currpoint.x - center.x)    );    radius = radius / prevradius * currradius;    length = radius / 2 * sqrt (12);};# user interface functions## bind changes to the fractal to user actions#leftup = function (data) {    transformfractal (data.ppos, data.pos);    drawfractal ();};dops = function () {    local s;    s = ['x' = 8 * 300; 'y' = 10.5 * 300;];    canvas = createwidget (-1, ['type' = 'ps'; 'size' = s;]);    setwidgetattr (canvas, ['window' = wrect;]);    drawfractal ();    destroywidget (canvas);    canvas=defcanvas;};transformfractal (['x' = 0; 'y' = 0;], ['x' = 0; 'y' = 0;]);drawfractal ();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -