js实现canvas五彩缤纷线条绘制抽象星空效果代码

代码语言:html

所属分类:粒子

代码描述:js实现canvas五彩缤纷线条绘制抽象星空效果代码

代码标签: 五彩缤纷 线条 绘制 抽象 星空 效果

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<title>A colourful world of Turbulence</title>
<style>
    body{
        padding: 0;
        background: black;
        margin: 0;
    }
</style>

</head>
<body>

<script>
    "use strict";

/**
 * Written by Dillon https://codepen.io/Dillo
 *
 * Inspired in very large part by Alex Andrix's work on Codepen
 * https://codepen.io/alexandrix/pen/jgyWww
 * @author Alex Andrix <alex@alexandrix.com>
 * @since 2019
 */



  const nbEddies = 5;
  const nbParticles = 1000; // number of particles
  const lifeTime = 1000; // average lifetime of particles

  let canv, ctx;   // canvas and drawing context
  let maxx, maxy;  // size of client Window
  let dimx, dimy;  // size of canvas

  let eddies;      // array of eddies
  let particles;   // array of particles

  let requestID;   // ID provided by window.requestAnimationFrame();
  let hueShift;

/* shortcuts for Math */

  const mrandom = Math.random; // see above alternative function for reproductible results
  const mfloor = Math.floor;
  const mround = Math.round;
  const mceil = Math.ceil;
  const mabs = Math.abs;
  const mmin = Math.min;
  const mmax = Math.max;

  const mPI = Math.PI;
  const mPIS2 = Math.PI / 2;
  const m2PI = Math.PI * 2;
  const msin = Math.sin;
  const mcos = Math.cos;
  const matan2 = Math.atan2;
  const mexp = Math.exp;

  const mhypot = Math.hypot;
  const msqrt = Math.sqrt;

//-----------------------------------------------------------------------------
// miscellaneous functions
//-----------------------------------------------------------------------------

  function alea (min, max) {
// random number [min..max[ . If no max is provided, [0..min[

    if (typeof max == 'undefined') return min * mrandom();
    return min + (max - min) * mrandom();
  }

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

  function intAlea (min, max) {
// random integer number [min..max[ . If no max is provided, [0..min[

    if (typeof max == 'undefined') {
      max = min; min = 0;
    }
    return mfloor(min + (max - min) * mrandom());
  } // intAlea

//------------------------------------------------------------------------
function createEddy () {

  return {
   x: alea (dimx),
   y: alea (dimy), 
/*    
   x: dimx / 2,
   y: dimy / 2, 
*/   
//   coeffR: 0.0,        // coefficient for radial velocity
   coeffR: 0.001 * (alea(0.7, 1.3)),        // coefficient for radial velocity
   radius: 150 + alea(-50, 50),          // radius where angular velocity is max
   coeffA1: 10000 * alea(0.8, 1.2),         // coefficient in exponent for angular velocity
   coeffA2: 0.01 * alea(0.8, 1.2),       // multiplying coefficient for angular velocity
   dir: (mrandom() > 0.5) ? 1 : -1 // direction of rotation
   }

} // createEddy

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
function createEddies() {
  eddies = [];                  // create empty array;
  for (let k = 0; k < nbEddies; ++k) {
    eddies.push(createEddy());
  } // for k
} // createEddies

//------------------------------------------------------------------------
function createParticle() {

  return {
    x: alea (-100, dimx + 100),
    y: alea (-100, dimy + 100),
    sat:  `${intAlea(50, 101)}%`,
    light: `${intAlea(30, 80)}%`,
    TTL: alea(lifeTime * 0.8.........完整代码请登录后点击上方下载按钮下载查看

网友评论0