• Edit
  • Download
  • <!DOCTYPE html>
    <html>
    
    <head>
      <meta charset="utf-8">
      <title>ZingSoft Demo</title>
      <script nonce="undefined" src="https://cdn.zingchart.com/zingchart.min.js"></script>
      <script nonce="undefined">
        zingchart.MODULESDIR = "https://cdn.zingchart.com/modules/";
        ZC.LICENSE = ["bab21d016b2dadc18447d2a055f061e3"];
      </script>
    
      <style>
        .zc-body {
          margin: 10px;
          padding: 10px;
          background-color: #fff;
        }
    
        input,
        button,
        select,
        textarea,
        label {
          font-family: 'Lucida Sans Unicode', Monaco, Tahoma, Verdana, Arial;
        }
    
        .zc-watermark {
          display: none;
        }
    
        ;
      </style>
    </head>
    
    <body class="zc-body">
      <div>
        <div id="zch"></div>
        <div id="zcg" style="float:left"></div>
        <div id="zcv" style="float:left"></div>
      </div>
    
      <script>
        ZC.LICENSE = ["569d52cefae586f634c54f86dc99e6a9", "b55b025e438fa8a98e32482b5f768ff5"];
        let iCols = 100;
        let iRows = 50;
        let iSize = 5;
    
        let chartConfig = {
          type: 'null',
          backgroundColor: '#fff',
          flat: true,
          heatmap: {
            alpha: 1,
            blur: iSize,
            brushType: 'square',
            maxValue: 1,
            minValue: 0,
            size: iSize,
          },
        };
    
        function createArr(iCols, iRows) {
          let aData = new Array(iCols);
          for (let i = 0; i < aData.length; i++) {
            aData[i] = new Array(iRows);
          }
          return aData;
        }
    
        let aGrid = createArr(iCols, iRows);
        let aHValues = [],
          aVValues = [];
        for (let i = 0; i < iCols; i++) {
          aHValues[i] = 0;
          for (let j = 0; j < iRows; j++) {
            aGrid[i][j] = Math.floor(2 * Math.random());
            if (aVValues[j] === null || typeof aVValues[j] === 'undefined') {
              aVValues[j] = 0;
            }
            aHValues[i] += aGrid[i][j];
            aVValues[j] += aGrid[i][j];
          }
        }
    
        zingchart.bind('zcg', 'load', function() {
          step();
        });
    
        function step() {
          let i, j;
          let aNextGrid = createArr(iCols, iRows);
          aHValues = [];
          aVValues = [];
    
          for (i = 0; i < iCols; i++) {
            aHValues[i] = 0;
            for (j = 0; j < iRows; j++) {
              let iState = aGrid[i][j];
              let iSum = 0;
              let iNeighbors = countNeighbors(aGrid, i, j);
    
              if (iState === 0 && iNeighbors === 3) {
                aNextGrid[i][j] = 1;
              } else if (iState === 1 && (iNeighbors < 2 || iNeighbors > 3)) {
                aNextGrid[i][j] = 0;
              } else {
                aNextGrid[i][j] = iState;
              }
    
              aHValues[i] += aNextGrid[i][j];
              if (aVValues[j] === null || typeof aVValues[j] === 'undefined') {
                aVValues[j] = 0;
              }
              aVValues[j] += aNextGrid[i][j];
            }
          }
    
          aGrid = aNextGrid;
    
          let aData = [];
          for (i = 0; i < iCols; i++) {
            for (j = 0; j < iRows; j++) {
              aData.push([i * iSize, j * iSize, aGrid[i][j]]);
            }
          }
          zingchart.exec('zcg', 'heatmap.setdata', {
            data: aData,
          });
    
          zingchart.exec('zch', 'setseriesvalues', {
            plotindex: 0,
            values: aHValues,
          });
          zingchart.exec('zcv', 'setseriesvalues', {
            plotindex: 0,
            values: aVValues,
          });
    
          window.setTimeout(step, 15);
        }
    
        function countNeighbors(aGrid, iX, iY) {
          let iSum = 0;
          for (let i = -1; i < 2; i++) {
            for (let j = -1; j < 2; j++) {
              let iCol = (iX + i + iCols) % iCols;
              let iRow = (iY + j + iRows) % iRows;
              iSum += aGrid[iCol][iRow];
            }
          }
          iSum -= aGrid[iX][iY];
          return iSum;
        }
    
        zingchart.loadModules('heatmap', function() {
          zingchart.render({
            id: 'zcg',
            width: iCols * iSize,
            height: iRows * iSize,
            output: 'canvas',
            data: chartConfig,
            modules: 'heatmap',
          });
    
          zingchart.render({
            id: 'zch',
            width: iCols * iSize,
            height: '80px',
            output: 'canvas',
            data: {
              flat: true,
              type: 'area',
              title: {
                text: 'Game of Life using Heatmap module',
                fontSize: '11px',
                align: 'left',
              },
              plot: {
                shadow: false,
                aspect: 'stepped',
                lineWidth: '1px',
                maxNodes: 0,
                maxTrackers: 0,
              },
              plotarea: {
                margin: '20 0 0 0',
              },
              scaleX: {
                visible: false,
              },
              scaleY: {
                visible: false,
              },
              series: [{
                values: aHValues,
              }, ],
            },
          });
    
          zingchart.render({
            id: 'zcv',
            width: '80px',
            height: iRows * iSize,
            output: 'canvas',
            data: {
              type: 'varea',
              flat: true,
              plot: {
                shadow: false,
                aspect: 'stepped',
                maxNodes: 0,
                maxTrackers: 0,
                lineWidth: '1px',
              },
              plotarea: {
                margin: '0 20 0 0',
              },
              scaleX: {
                mirrored: true,
                visible: false,
              },
              scaleY: {
                visible: false,
              },
              series: [{
                values: aHValues,
              }, ],
            },
          });
        });
      </script>
    </body>
    
    </html>
    <!DOCTYPE html>
    <html>
    
    <head>
      <meta charset="utf-8">
      <title>ZingSoft Demo</title>
      <script src="https://cdn.zingchart.com/zingchart.min.js"></script>
      <script>
        zingchart.MODULESDIR = "https://cdn.zingchart.com/modules/";
        ZC.LICENSE = ["bab21d016b2dadc18447d2a055f061e3"];
      </script>
    
    </head>
    
    <body class="zc-body">
      <div>
        <div id="zch"></div>
        <div id="zcg" style="float:left"></div>
        <div id="zcv" style="float:left"></div>
      </div>
    
    </body>
    
    </html>
    .zc-body {
      margin: 10px;
      padding: 10px;
      background-color: #fff;
    }
    
    input,
    button,
    select,
    textarea,
    label {
      font-family: 'Lucida Sans Unicode', Monaco, Tahoma, Verdana, Arial;
    }
    
    .zc-watermark {
      display: none;
    }
    
    ;
    let iCols = 100;
    let iRows = 50;
    let iSize = 5;
    
    let chartConfig = {
      type: 'null',
      backgroundColor: '#fff',
      flat: true,
      heatmap: {
        alpha: 1,
        blur: iSize,
        brushType: 'square',
        maxValue: 1,
        minValue: 0,
        size: iSize,
      },
    };
    
    function createArr(iCols, iRows) {
      let aData = new Array(iCols);
      for (let i = 0; i < aData.length; i++) {
        aData[i] = new Array(iRows);
      }
      return aData;
    }
    
    let aGrid = createArr(iCols, iRows);
    let aHValues = [],
      aVValues = [];
    for (let i = 0; i < iCols; i++) {
      aHValues[i] = 0;
      for (let j = 0; j < iRows; j++) {
        aGrid[i][j] = Math.floor(2 * Math.random());
        if (aVValues[j] === null || typeof aVValues[j] === 'undefined') {
          aVValues[j] = 0;
        }
        aHValues[i] += aGrid[i][j];
        aVValues[j] += aGrid[i][j];
      }
    }
    
    zingchart.bind('zcg', 'load', function() {
      step();
    });
    
    function step() {
      let i, j;
      let aNextGrid = createArr(iCols, iRows);
      aHValues = [];
      aVValues = [];
    
      for (i = 0; i < iCols; i++) {
        aHValues[i] = 0;
        for (j = 0; j < iRows; j++) {
          let iState = aGrid[i][j];
          let iSum = 0;
          let iNeighbors = countNeighbors(aGrid, i, j);
    
          if (iState === 0 && iNeighbors === 3) {
            aNextGrid[i][j] = 1;
          } else if (iState === 1 && (iNeighbors < 2 || iNeighbors > 3)) {
            aNextGrid[i][j] = 0;
          } else {
            aNextGrid[i][j] = iState;
          }
    
          aHValues[i] += aNextGrid[i][j];
          if (aVValues[j] === null || typeof aVValues[j] === 'undefined') {
            aVValues[j] = 0;
          }
          aVValues[j] += aNextGrid[i][j];
        }
      }
    
      aGrid = aNextGrid;
    
      let aData = [];
      for (i = 0; i < iCols; i++) {
        for (j = 0; j < iRows; j++) {
          aData.push([i * iSize, j * iSize, aGrid[i][j]]);
        }
      }
      zingchart.exec('zcg', 'heatmap.setdata', {
        data: aData,
      });
    
      zingchart.exec('zch', 'setseriesvalues', {
        plotindex: 0,
        values: aHValues,
      });
      zingchart.exec('zcv', 'setseriesvalues', {
        plotindex: 0,
        values: aVValues,
      });
    
      window.setTimeout(step, 15);
    }
    
    function countNeighbors(aGrid, iX, iY) {
      let iSum = 0;
      for (let i = -1; i < 2; i++) {
        for (let j = -1; j < 2; j++) {
          let iCol = (iX + i + iCols) % iCols;
          let iRow = (iY + j + iRows) % iRows;
          iSum += aGrid[iCol][iRow];
        }
      }
      iSum -= aGrid[iX][iY];
      return iSum;
    }
    
    zingchart.loadModules('heatmap', function() {
      zingchart.render({
        id: 'zcg',
        width: iCols * iSize,
        height: iRows * iSize,
        output: 'canvas',
        data: chartConfig,
        modules: 'heatmap',
      });
    
      zingchart.render({
        id: 'zch',
        width: iCols * iSize,
        height: '80px',
        output: 'canvas',
        data: {
          flat: true,
          type: 'area',
          title: {
            text: 'Game of Life using Heatmap module',
            fontSize: '11px',
            align: 'left',
          },
          plot: {
            shadow: false,
            aspect: 'stepped',
            lineWidth: '1px',
            maxNodes: 0,
            maxTrackers: 0,
          },
          plotarea: {
            margin: '20 0 0 0',
          },
          scaleX: {
            visible: false,
          },
          scaleY: {
            visible: false,
          },
          series: [{
            values: aHValues,
          }, ],
        },
      });
    
      zingchart.render({
        id: 'zcv',
        width: '80px',
        height: iRows * iSize,
        output: 'canvas',
        data: {
          type: 'varea',
          flat: true,
          plot: {
            shadow: false,
            aspect: 'stepped',
            maxNodes: 0,
            maxTrackers: 0,
            lineWidth: '1px',
          },
          plotarea: {
            margin: '0 20 0 0',
          },
          scaleX: {
            mirrored: true,
            visible: false,
          },
          scaleY: {
            visible: false,
          },
          series: [{
            values: aHValues,
          }, ],
        },
      });
    });