


HTML5 implements 3D and 2D visualization QuadTree quadtree collision detection_PHP tutorial
HTML5 implements 3D and 2D visualization QuadTree quadtree collision detection
QuadTree quadtree, as the name suggests, is a tree-like data structure. Each node has four child nodes, which can Recursively divide a two-dimensional plane into subregions. QuadTree is often used for spatial database indexing, 3D vertebral visible area cropping, and even image analysis and processing. What we introduce today is QuadTree’s collision detection, which is most commonly used in the game field. Using the QuadTree algorithm will greatly reduce the number of collisions that need to be tested, thereby improving the game refresh performance. The example in this article is based on the Canvas topology map of HT for Web and the 3D engine component of WebGL, sharing the same data model DataModel through GraphView and Graph3dView, and simultaneously presenting the QuadTree algorithm. 2D and 3D collision view effects: http://v.youku.com/v_show/id_XODQyNTA1NjY0.html
http://www.hightopo.com/demo/QuadTree/ht-quadtree.html
There are many mature versions of QuadTree implementation. The one I chose is https://github.com/timohausmann/quadtree-js/ The algorithm of quadtree is very simple, so this The open source library only has about 200 lines of code. It is also very simple to use. Construct a Quadtree object. The first parameter is passed in rect information to set the game space range. Every time requestAnimationFrame refreshes the frame, the old data is first cleared through quadtree.clear() and inserted through quadtree.insert(rect). The new node rectangular area, so that quadtree is initialized. All that remains is to call quadtree.retrieve(rect) as needed to obtain an array of rectangular objects that may intersect with the specified rectangular area and need to be detected.
I built two components of HT (http://www.hightopo.com/) GraphView and Graph3dView, which are split left and right through ht.widget.SplitView. Since both views share the same DataModel, we The remaining focus is only on the data operation of the DataModel. 200 ht.Node objects are constructed. The attr attribute of each object saves the random movement directions vx and vy, and also saves the rectangular object that will be repeatedly inserted into the quadtree. This avoids repeatedly creating objects when updating each frame. At the same time, the rectangular object also references the ht.Node object. When obtaining the rectangular object that needs to be detected through quadtree.retrieve(rect), we can specify its associated ht.Node object. , because we need to set a red color effect on the primitives that are finally detected as collisions, that is, ht.Node usually displays the default blue color, and will change to red when it collides with each other.
It should be noted that the array of rectangular objects that need to be detected obtained from quadtree.retrieve(rect) will contain its own primitives. At the same time, these are only primitives that may collide. It does not mean that they have already collided. Since we The example is a rectangle, so ht.Default.intersectsRect(r1, r2) is used to finally determine whether it intersects. If your example is a circle, you can calculate whether the distance between the two circle centers is less than two radii to determine whether it intersects, so the final judgment is Criteria vary based on game type.
The use of QuadTree has greatly improved the computing performance. Otherwise, 100 graphics elements would require 100*100 times of monitoring. In my example scenario, the amount is generally 100*(10~30): http://v.youku.com/v_show/id_XODQyNTA1NjY0.html
http://www.hightopo.com/demo/QuadTree/ht-quadtree.html
In addition to collision detection, the QuadTree algorithm has many interesting application areas. If you are interested, you can play with this https://github.com/fogleman/Quads
All The code is as follows for reference:
function init(){ d = 200; speed = 8; dataModel = new ht.DataModel(); g3d = new ht.graph3d.Graph3dView(dataModel); g2d = new ht.graph.GraphView(dataModel); mainSplit = new ht.widget.SplitView(g3d, g2d); mainSplit.addToDOM(); g2d.translate(300, 220); g2d.setZoom(0.8, true); for(var i=0; i d){ data.a('vx', -vx); x = d - w; } if(y - h d){ data.a('vy', -vy); y = d - h; } data.setPosition(x, y); var obj = data.a('obj'); obj.x = x - w; obj.y = y - h; quadtree.insert(obj); setColor(data, undefined); } }); dataModel.each(function(data){ if(!(data instanceof ht.Shape)){ var obj = data.a('obj'); var objs = quadtree.retrieve(obj); if(objs.length > 1){ for(var i=0; i<objs.length i var data2="objs[i].data;" if continue data2.a setcolor requestanimationframe function randminmax max return min createshape shape="new" ht.shape shape.setpoints shape.setthickness shape.settall shape.s null datamodel.add color data.s><p style="margin:10px auto;font-family:verdana, Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;"></p> <p align="left"></p> <div style="display:none;"> <span id="url" itemprop="url">http://www.bkjia.com/PHPjc/1080259.html</span><span id="indexUrl" itemprop="indexUrl">www.bkjia.com</span><span id="isOriginal" itemprop="isOriginal">true</span><span id="isBasedOnUrl" itemprop="isBasedOnUrl">http: //www.bkjia.com/PHPjc/1080259.html</span><span id="genre" itemprop="genre">TechArticle</span><span id="description" itemprop="description">HTML5 realizes 3D and 2D visualization QuadTree quadtree collision detection QuadTree quadtree, as the name suggests, is a tree-like data structure. Each node has four child nodes, which can recursively divide the two-dimensional plane...</span> </div> <div class="art_confoot"></div></objs.length>

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



In recent days, Ice Universe has been steadily revealing details about the Galaxy S25 Ultra, which is widely believed to be Samsung's next flagship smartphone. Among other things, the leaker claimed that Samsung only plans to bring one camera upgrade

OnLeaks has now partnered with Android Headlines to provide a first look at the Galaxy S25 Ultra, a few days after a failed attempt to generate upwards of $4,000 from his X (formerly Twitter) followers. For context, the render images embedded below h

Alongside announcing two new smartphones, TCL has also announced a new Android tablet called the NXTPAPER 14, and its massive screen size is one of its selling points. The NXTPAPER 14 features version 3.0 of TCL's signature brand of matte LCD panels

The Vivo Y300 Pro just got fully revealed, and it's one of the slimmest mid-range Android phones with a large battery. To be exact, the smartphone is only 7.69 mm thick but features a 6,500 mAh battery. This is the same capacity as the recently launc

Samsung has not offered any hints yet about when it will update its Fan Edition (FE) smartphone series. As it stands, the Galaxy S23 FE remains the company's most recent edition, having been presented at the start of October 2023. However, plenty of

In recent days, Ice Universe has been steadily revealing details about the Galaxy S25 Ultra, which is widely believed to be Samsung's next flagship smartphone. Among other things, the leaker claimed that Samsung only plans to bring one camera upgrade

The Redmi Note 14 Pro Plus is now official as a direct successor to last year'sRedmi Note 13 Pro Plus(curr. $375 on Amazon). As expected, the Redmi Note 14 Pro Plus heads up the Redmi Note 14 series alongside theRedmi Note 14and Redmi Note 14 Pro. Li

OnePlus'sister brand iQOO has a 2023-4 product cycle that might be nearlyover; nevertheless, the brand has declared that it is not done with itsZ9series just yet. Its final, and possibly highest-end,Turbo+variant has just beenannouncedas predicted. T
