| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | <!DOCTYPE html><html><!--Copyright 2008 The Closure Library Authors. All Rights Reserved.Use of this source code is governed by the Apache License, Version 2.0.See the COPYING file for details.--><head><title>QuadTree Demo</title><script src="../base.js"></script><script>  goog.require('goog.structs');  goog.require('goog.events');  goog.require('goog.structs.QuadTree');</script><style>  .region {    position: absolute;    -moz-outline: 1px solid #CCC;    outline: 1px solid #CCC;    z-index: 500;  }  .point {    position: absolute;    background-color: red;    width: 4px;    height: 4px;    z-index: 1000;  }  #el {    width: 500px;    height: 500px;    background-color: #FCFCFC;  }  #values {    font-size: small;  }  #info {    position: absolute;    top: 5px;    left: 505px;    width: 200px;    font: normal 11px verdana;  }</style></head><body><div id="el"></div><div id="info">  <p>Click on the area to the left to add a point to the quadtree, clicking on  a point will remove it from the tree.</p>  <pre id="values"></pre></div><script>function visualize(node) {  var div = document.createElement('div');  div.className = 'region';  div.style.top = node.y + 'px';    div.style.left = node.x + 'px';    div.style.width = node.w+ 'px';    div.style.height = node.h + 'px';  if (node.nodeType == goog.structs.QuadTree.NodeType.POINTER) {    visualize(node.nw, div);    visualize(node.ne, div);    visualize(node.sw, div);    visualize(node.se, div);  } else if (node.nodeType == goog.structs.QuadTree.NodeType.LEAF) {    var point = document.createElement('div');    point.className = 'point';    point.style.top = (node.point.y - 2) + 'px';    point.style.left = (node.point.x - 2) + 'px'    point.text = node.point.value;    point.point = node.point;    document.getElementById('el').appendChild(point);  }  document.getElementById('el').appendChild(div);    var values = ['Values:'];  qt.forEach(function(value, coord) {    values.push(coord + ' ' + value);  });  document.getElementById('values').innerHTML = values.join('\n');}var maxW = 500, maxH = 500;var qt = new goog.structs.QuadTree(0, 0, maxW, maxH);visualize(qt.getRootNode());goog.events.listen(document.body, 'click', function(e) {  if (e.target.className == 'point') {    qt.remove(e.target.point.x, e.target.point.y);  } else {    var x = e.clientX;    var y = e.clientY;    if (x < maxW && y < maxH) qt.set(x, y, new Date().toLocaleString());  }  var el = document.getElementById('el');  el.innerHTML = '';  visualize(qt.getRootNode());});</script></body></html>
 |