basti1012.bplaced.net

Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
    Animation wie sich ein Baum in Winter und Sommer sich verhält

    Code

                                        
                                    <!DOCTYPE html><meta charset="utf-8"/><body style="margin:0;"><canvas style="padding: 0; margin: auto; display: block;" id="tcanv"/>
    <script>
    BGC = "white";
    FC = "#009cff";
    seed = 1;
    ST = 1623776302086;
    Co = 30;
    C1 = 1500;
    MC = 0;
    TC = 60;
    maxDepth = 50;
    fps = 60;
    CB1 = 'green';
    CB2 = 'saddlebrown';
    fl = [];
    canvas = document.getElementById("tcanv");
    ctx = canvas.getContext("2d");
    t = 0;
    bC = 0;
    aux = 0;
    
    function Anim() {
        setTimeout(function() {
            window.requestAnimationFrame(Anim);
            draw();
        }, 1000 / fps);
    };
    
    function draw() {
        ss = Math.min(window.innerWidth, window.innerHeight);
        tcanv.width = ss;
        tcanv.height = ss;
        t = (Date.now() - ST) / 1000;
        ctx.fillStyle = BGC;
        ctx.fillRect(0, 0, ss, ss);
        ctx.fillStyle = FC;
        ctx.fillRect(ss / 8, ss / 8, 3 * ss / 4, ss - 40 * ss / 700 - ss / 8);
        ctx.translate(ss / 2, ss);
        ii = 0;
        Tree();
        Sft = F(t, shS, TC);
        if (Sft > 0) {
            srd(1, 'rgba(255,255,255,0.7)');
            if (Sft > 0.2) {
                CB1 = 'white'
            }
        };
        if (Sft < -0.2) {
            CB1 = 'green'
        };
        Rft = F(t, shR, TC);
        if (Rft > 0) {
            srd(4, 'rgba(0,0,255,0.7)')
        };
        ctx.setTransform(1, 0, 0, 1, 0, 0);
        ctx.fillStyle = 'rgba(0,0,0,' + F(t, shDN, TC / 5) * 0.65 + ')';
        ctx.fillRect(0, 0, ss, ss);
    };
    Math.seed = function(s) {
        var mask = 0xffffffff,
            m_w = (123456789 + s) & mask,
            m_z = (987654321 - s) & mask;
            return function() {
            m_z = (36969 * (m_z & 65535) + (m_z >>> 16)) & mask;
            m_w = (18000 * (m_w & 65535) + (m_w >>> 16)) & mask;
            var result = ((m_z << 16) + (m_w & 65535)) >>> 0;
            result /= 4294967296;
            return result;
        }
    };
    
    function F(tt, sh, T) {
        var aa = tt / T;
        aa = (aa - Math.floor(aa)) * 12;
        var i = Math.floor(aa);
        var v = (sh[i + 1] - sh[i]) * (aa - i) + sh[i];
        return v;
    };
    shS = [1, 0.87, 0.5, 0, -0.5, -0.87, -1, -0.87, -0.5, 0, 0.5, 0.87, 1];
    shR = [0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0];
    shMC = [0, 0.07, 0.25, 0.5, 0.75, 0.93, 1, 0.93, 0.75, 0.5, 0.25, 0.07, 0];
    shL = [0, 0.07, 0.25, 0.5, 0.75, 0.93, 1, 0.93, 0.75, 0.5, 0.25, 0.07, 0];
    shF = [0, 0, 0, 0, 0.5, 0.87, 1, 0.5, 0.0, 0, 0, 0, 0];
    shDN = [1, 0.87, 0.5, 0, 0, 0, 0, 0, 0, 0, 0.5, 0.87, 1];
    shD = [0, 0, 0.26, 0.71, 0.97, 0.97, 0.71, 0.26, 0, 0, 0, 0, 0];
    
    function ir() {
        for (var i = 0; i < 15000; i++) {
            var rr = rand(0, 1);
            rav.push(rr)
        }
    };
    
    function mr(i0) {
        for (var i = i0; i < 15000; i++) {
            var rr = rand(0, 1);
            rav[i] = rr
        }
    };
    
    function ri() {
        for (var i = 0; i < 100; i++) {
            var xx = rand(-0.5, 0.5),
                yy = rand(-1, 0),
                rr = rand(2 / 700, 5 / 700);
            fl.push({
                x: xx,
                y: yy,
                r: rr
            })
        }
    };
    
    function srd(sc, c) {
        for (var i = 0; i < 100; i++) {
            fl[i].y += 5 * sc / fl[i].r / 490000;
            if (fl[i].y > 0) {
                fl[i].y = -1;
            };
            ci(fl[i].x * ss, fl[i].y * ss, fl[i].r / sc * ss, fl[i].r * sc * ss, c)
        }
    };
    
    function Tree() {
        bC = 0;
        random = Math.seed(seed);
        Branch2(0, -40 * ss / 700, 10 * ss / 700, Math.PI / 2, 1, 0);
    };
    
    function rand(min, max) {
        return (random() * (max - min) + min);
    };
    
    function ci(x, y, r1, r2, c) {
        ctx.beginPath();
        ctx.fillStyle = c;
        ctx.ellipse(x, y, r1, r2, 0, 0, 2 * Math.PI);
        ctx.fill();
    };
    
    function li(x0, y0, x1, y1, sw, c) {
        ctx.beginPath();
        ctx.lineWidth = sw;
        ctx.lineCap = 'round';
        ctx.strokeStyle = c;
        ctx.moveTo(x0, y0);
        ctx.lineTo(x1, y1);
        ctx.stroke();
    };
    
    function Branch2(x0, y0, length, angle, branch, depth) {
        bC++;
        MC = F(t, shMC, TC * 2) * (C1 - Co) + Co;
        if (bC > MC) {
            return;
        };
        if (depth > maxDepth) {
            return;
        };
        if (bC == Co) {
            random = Math.seed(seed * (Math.floor(0.5 * t / TC) + 1));
            mr(ii);
        };
        var x1 = x0 + length * Math.cos(angle),
            y1 = y0 - length * Math.sin(angle);
        var d = depth / maxDepth,
            sw = 0.7 + 40.0 * Math.pow(1.0 - d, 2.4) * (F(t, shD, TC * 2) * 0.7 + 0.4) * ss / 700,
            rA = 0.7,
            fA = 0.3;
        var rfr = F(t, shF, TC * 2) * 5 * ss / 700;
        var rl = (F(t, shL, TC * 2) * 0.7 + 0.3) * 5 * ss / 700;
        var pa = Math.pow(d, 0.5);
        rA *= pa;
        fA *= pa;
        length *= rav[ii] * 0.1 + 0.95;
        ii++;
        if (depth > 35) {
            if (rav[ii] > 0.95) {
                ci(x0, y0 + rfr, rfr, rfr, 'rgba(255,0,0,0.7)')
            }
        };
        ii++;
        if (depth > 25) {
            if (rav[ii] > 0.95) {
                ci(x0, y0 + 2 * rl, rl, rl * 2, 'rgba(0,255,0,0.7)')
            }
        };
        ii++;
        angle = angle + 0.005 * Math.sin(branch * t / 10 + branch);
        li(x0, y0, x1, y1, sw, CB2);
        li(x0 - sw / 2, y0, x1 - sw / 2, y1, sw, CB1);
        if (rav[ii] > 0.85 && depth > 5) {
            Branch2(x1, y1, length, angle - fA, branch + 1, depth + 1);
            Branch2(x1, y1, length, angle + fA, branch + 1, depth + 1);
            ii++;
        } else {
            ii++;
            Branch2(x1, y1, length, angle + rav[ii] * 2 * rA - rA, branch, depth + 1);
            ii++;
        }
    };
    random = Math.seed(seed);
    ss = 700;
    ri();
    random = Math.seed(seed);
    rav = [];
    ir();
    Anim()
      </script></body>