Table of Contents
HTML5 implements 3D and 2D visualization QuadTree quadtree collision detection
Home Backend Development PHP Tutorial HTML5 implements 3D and 2D visualization QuadTree quadtree collision detection_PHP tutorial

HTML5 implements 3D and 2D visualization QuadTree quadtree collision detection_PHP tutorial

Jul 12, 2016 am 09:03 AM
android

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

Screen Shot 2014-12-06 at 12.41.24 AM

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


Screen Shot 2014-12-06 at 12.42.35 AM

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

Screen Shot 2014-12-06 at 12.52.17 AM

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>
Copy after login
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
1 months ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
1 months ago By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Have Crossplay?
1 months ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

New report delivers damning assessment of rumoured Samsung Galaxy S25, Galaxy S25 Plus and Galaxy S25 Ultra camera upgrades New report delivers damning assessment of rumoured Samsung Galaxy S25, Galaxy S25 Plus and Galaxy S25 Ultra camera upgrades Sep 12, 2024 pm 12:23 PM

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

Samsung Galaxy S25 Ultra leaks in first render images with rumoured design changes revealed Samsung Galaxy S25 Ultra leaks in first render images with rumoured design changes revealed Sep 11, 2024 am 06:37 AM

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

IFA 2024 | TCL\'s NXTPAPER 14 won\'t match the Galaxy Tab S10 Ultra in performance, but it nearly matches it in size IFA 2024 | TCL\'s NXTPAPER 14 won\'t match the Galaxy Tab S10 Ultra in performance, but it nearly matches it in size Sep 07, 2024 am 06:35 AM

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

Vivo Y300 Pro packs 6,500 mAh battery in a slim 7.69 mm body Vivo Y300 Pro packs 6,500 mAh battery in a slim 7.69 mm body Sep 07, 2024 am 06:39 AM

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 Galaxy S24 FE billed to launch for less than expected in four colours and two memory options Samsung Galaxy S24 FE billed to launch for less than expected in four colours and two memory options Sep 12, 2024 pm 09:21 PM

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

New report delivers damning assessment of rumoured Samsung Galaxy S25, Galaxy S25 Plus and Galaxy S25 Ultra camera upgrades New report delivers damning assessment of rumoured Samsung Galaxy S25, Galaxy S25 Plus and Galaxy S25 Ultra camera upgrades Sep 12, 2024 pm 12:22 PM

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

Xiaomi Redmi Note 14 Pro Plus arrives as first Qualcomm Snapdragon 7s Gen 3 smartphone with Light Hunter 800 camera Xiaomi Redmi Note 14 Pro Plus arrives as first Qualcomm Snapdragon 7s Gen 3 smartphone with Light Hunter 800 camera Sep 27, 2024 am 06:23 AM

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

iQOO Z9 Turbo Plus: Reservations begin for the potentially beefed-up series flagship iQOO Z9 Turbo Plus: Reservations begin for the potentially beefed-up series flagship Sep 10, 2024 am 06:45 AM

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

See all articles