c#四叉树算法实现


C#实现的4叉树算法,亲测可用。适合初学者
资源截图
代码片段和文件信息
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public delegate void UQtCellChanged(UQtLeaf left UQtLeaf entered);
public delegate void UQtCellSwapIn(UQtLeaf leaf);
public delegate void UQtCellSwapOut(UQtLeaf leaf);

public static class UQtConfig
{
    // this value determines the smallest cell size
    // the space-partition process would stop dividing if cell size is smaller than this value
    public static float CellSizeThreshold = 50.0f;

    // swap-in distance of cells
    public static float CellSwapInDist = 100.0f;
    // swap-out distance of cells 
    //  (would be larger than swap-in to prevent poping)
    public static float CellSwapOutDist = 150.0f;

    // time interval to update the focus point
    // so that a new swap would potentially triggered (in seconds)
    public static float SwapTriggerInterval = 0.5f;
    // time interval to update the in/out swapping queues (in seconds)
    public static float SwapProcessInterval = 0.2f;
}

// user data stored in quadtree leaves
public interface IQtUserData
{
    Vector3 GetCenter();
    Vector3 GetExtends();

    void SwapIn();
    void SwapOut();

    bool IsSwapInCompleted();
    bool IsSwapOutCompleted();
}

public class UQtNode
{
    public UQtNode(Rect bound)
    {
        _bound = bound;
    }

    public Rect Bound { get { return _bound; } }
    protected Rect _bound;

    public virtual void SetSubNodes(UQtNode[] subNodes)
    {
        _subNodes = subNodes;
    }

    public virtual void Receive(IQtUserData userData)
    {
        if (!UQtAlgo.Intersects(Bound userData))
        {
            return;
        }

        foreach (var sub in SubNodes)
        {
            sub.Receive(userData);
        }
    }

    public UQtNode[] SubNodes { get { return _subNodes; } }
    public const int SubCount = 4;
    protected UQtNode[] _subNodes = null;
}

public class UQtLeaf : UQtNode
{
    public UQtLeaf(Rect bound) : base(bound)
    {
    }
    public override void SetSubNodes(UQtNode[] subNodes)
    {
        UCore.Assert(false);
    }

    public override void Receive(IQtUserData userData)
    {
        if (!UQtAlgo.Intersects(Bound userData))
            return;

        if (Bound.Contains(new Vector2(userData.GetCenter().x userData.GetCenter().z)))
        {
            _ownedobjects.Add(userData);            
        }
        else
        {
            _affectedobjects.Add(userData);
        }
    }

    public void SwapIn()
    {
        foreach (var obj in _ownedobjects)
            obj.SwapIn();
        foreach (var obj in _affectedobjects)
            obj.SwapIn();
    }

    public void SwapOut()
    {
        foreach (var obj in _ownedobjects)
            obj.SwapOut();
        foreach (var obj in _affectedobjects)
            obj.SwapOut();
    }

    public bool IsSwapInCompleted()
    {
        foreach (var obj in _ownedobjects)
        {
            if (!obj.IsSwapInCompleted())
                return false;
        }
        fore

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-07-19 06:56  uquadtree-master
     文件         499  2015-07-19 06:56  uquadtree-master.gitignore
     文件        1084  2015-07-19 06:56  uquadtree-masterLICENSE
     文件         128  2015-07-19 06:56  uquadtree-masterREADME.md
     目录           0  2015-07-19 06:56  uquadtree-masteruquadtree
     目录           0  2015-07-19 06:56  uquadtree-masteruquadtreeUnity-5.0.1f1
     文件     3470336  2015-07-19 06:56  uquadtree-masteruquadtreeUnity-5.0.1f1UnityEditor.dll
     文件      794112  2015-07-19 06:56  uquadtree-masteruquadtreeUnity-5.0.1f1UnityEngine.dll
     文件         974  2015-07-19 06:56  uquadtree-masteruquadtreeuquadtree.sln
     目录           0  2015-07-19 06:56  uquadtree-masteruquadtreeuquadtree
     目录           0  2015-07-19 06:56  uquadtree-masteruquadtreeuquadtreeProperties
     文件        1394  2015-07-19 06:56  uquadtree-masteruquadtreeuquadtreePropertiesAssemblyInfo.cs
     文件        7628  2015-07-19 06:56  uquadtree-masteruquadtreeuquadtreeUQuadtree.cs
     文件        4971  2015-07-19 06:56  uquadtree-masteruquadtreeuquadtreeUQuadtree_Internal.cs
     文件        2604  2015-07-19 06:56  uquadtree-masteruquadtreeuquadtreeuquadtree.csproj
     目录           0  2015-07-19 06:56  uquadtree-masteruquadtree_test
     目录           0  2015-07-19 06:56  uquadtree-masteruquadtree_testAssets
     文件         191  2015-07-19 06:56  uquadtree-masteruquadtree_testAssetsUQuadtree.meta
     目录           0  2015-07-19 06:56  uquadtree-masteruquadtree_testAssetsUQuadtree
     文件         191  2015-07-19 06:56  uquadtree-masteruquadtree_testAssetsUQuadtreeMaterials.meta
     目录           0  2015-07-19 06:56  uquadtree-masteruquadtree_testAssetsUQuadtreeMaterials
     文件        4268  2015-07-19 06:56  uquadtree-masteruquadtree_testAssetsUQuadtreeMaterialsGround.mat
     文件         179  2015-07-19 06:56  uquadtree-masteruquadtree_testAssetsUQuadtreeMaterialsGround.mat.meta
     文件         191  2015-07-19 06:56  uquadtree-masteruquadtree_testAssetsUQuadtreeScenes.meta
     目录           0  2015-07-19 06:56  uquadtree-masteruquadtree_testAssetsUQuadtreeScenes
     文件       34178  2015-07-19 06:56  uquadtree-masteruquadtree_testAssetsUQuadtreeScenes est_scene.unity
     文件         174  2015-07-19 06:56  uquadtree-masteruquadtree_testAssetsUQuadtreeScenes est_scene.unity.meta
     文件         191  2015-07-19 06:56  uquadtree-masteruquadtree_testAssetsUQuadtreescripts.meta
     目录           0  2015-07-19 06:56  uquadtree-masteruquadtree_testAssetsUQuadtreescripts
     文件        1900  2015-07-19 06:56  uquadtree-masteruquadtree_testAssetsUQuadtreescriptsUTestBootstrap.cs
     文件         262  2015-07-19 06:56  uquadtree-masteruquadtree_testAssetsUQuadtreescriptsUTestBootstrap.cs.meta
............此处省略19个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)