【Unity】经典四叉树的实现以及和无空间划分加速下的效率对比分析

news/2024/11/15 2:09:40/文章来源:https://www.cnblogs.com/JimmyZou/p/18385213

背景

假如场景中存在大量的对象,需要快速找到某个范围内的所有对象,如果通过传统的方式,就需要对所有的物体遍历,依次判断是否在范围中,这样非常耗时。所以通过空间划分的方法将其加速,本文中采用四叉树的方式,从实现思想和代码层面对效率进行分析。

思想

在空间划分算法中首先需要对所有的对象进行维护,按照某种方式存放起来,也就是插入(Insert),之后再进行搜索(Query)

在插入前首先需要规定这个树最大的深度maxDepth,这里为画图方便,设定为3层,当到达最深的层,则不再划分。

插入

对于每个对象,都执行以下的插入操作:

(1)首先将一个物体放入一个定义了边界的空间,如果这个物体和该空间有重叠,则执行插入。
(2)在插入前,如果当前层没有到达最深的层,将该区域划分成四个子区域。
(3)对每个子区域,都递归地执行一遍(1)。
(4)重复(1)(2)(3)。

压线处理

假如物体和某层的划分线重叠了,一般有两种处理方式。

  • 方式1:由两个子区域分别维护,这样的缺点是比较浪费内存空间。

  • 方式2:由当前层维护,不插入到子区域。

搜索

实现

假如场景中存在1000个对象,每个对象都是一个逻辑实体,会在每帧和周围半径内的其他对象进行交互判断。那么在传统方式下,每个对象都要去依次遍历其他的所有对象,判断它们是否落在自己的半径内,这样需要花费O(n²)的时间,非常耗时。所以本文通过

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/788669.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【视频讲解】数据挖掘实战:Python金融贷款模型分类潜在贷款客户

全文链接:https://tecdat.cn/?p=37521 原文出处:拓端数据部落公众号 分析师:Hengtao Fan 模型的存在依托于这样一个事实:基于概率的决策乃是最优之选。将概率转化为评分,能够便于对齐风险。而评分则是通过统计的方法来识别潜在客户,进而判断客户是否合乎心意。这里的 “…

源代码管理器tfs转git并保留历史提交记录

1、到GitHub https://github.com/git-tfs/git-tfs/releases 下载最新版本的GitTfs工具 2、下载的压缩包解压,并将压缩包路径添加到系统的环境变量 3、执行 git-tfs -help 有输出就可以了,程序就可以使用了 4、新建一个目录,用户拉取tfs代码并生成tfs提交记录 语法:git-tf…

python3安装编译_tkinter模块丢失

1.make的时候报缺少_tkinter模块,上一步./configure已经checking发现_tkinter missing 2.安装tk、tcl相关的包,包括python3-tk仍然没有解决问题。讲相关库移到/usr/lib也没解决问题。3.查看./configure的命令行参数,在环境变量中有两个参数:TCLTK_CFLAGSC compiler flags f…

来自OpenAI官网的Function calling介绍与最佳实践

学习如何将大型语言模型连接到外部工具。 介绍 函数调用允许您将模型如gpt-4o与外部工具和系统连接起来。这对于许多事情都很有用,比如为AI助手赋能,或者在你的应用程序与模型之间建立深度集成。 在2024年8月,我们推出了结构化输出功能。当你在函数定义中通过设置strict: tr…

局域网内两台设备只有一方可以ping通问题解决

场景 局域网内有两台笔记本,都是windows系统,都是连接的同一个路由器,在同一个网段中。 但是其中的一台笔记本192.168.1.101,另外一台是192.168.1.100 ping命令测试发现192.168.1.101无法ping通192.168.1.100这是为什么呢? 排查与修复 首先的两台电脑为了安全,防火墙都是…

prometheus学习笔记之cAdvisor

一、cAdvisor简介监控Pod指标数据需要使⽤cadvisor, cadvisor由⾕歌开源, cadvisor不仅可以搜集⼀台机器上所有运⾏的容器信息,还提供基础查询界⾯和http接⼝,⽅便其他组件如Prometheus进⾏数据抓取cAdvisor可以对节点机器上的资源及容器进⾏实时监控和性能数据采集,包括C…

国产化适配——人大金仓V8R6(1)

本文主要记录kingbase安装及存储过程修改相关内容,或有错漏,请指正。 原数据库:Mysql8.0.31 现数据库:KingbaseES V008R006C008M001B0030 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit 一、kingbase安装1.安装前准备 1.1查看…

南沙区信奥赛CSP-J/S 陈老师解题:1350:【例4-11】最短网络(agrinet)

​【题目描述】农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了用最小的消费,他想铺设最短的光纤去连接所有的农场。你…

从零开始带你玩转 AI 变现公开课

在这个数字化时代,AI技术正以前所未有的速度改变着我们的创作与变现方式。小红书,作为年轻人喜爱的社交电商平台,更是为创作者们提供了广阔的舞台。但如何在小红书上利用AI技术实现内容创作与收益转化的双赢?我们的公开课将为你一一揭晓答案! 主课程亮点:掌握DALLE模型文…

C++基础/C++中的多态(关于虚...)

C++中的多态(关于虚...) 1.前置基础知识 1.1对象是如何存储在内存中的 #include <iostream> #include <string>class Animal { private:string name;int age;public:Animal(std::string name, int age) : name(name), age(age) {};~Animal();virtual void eat() …

算法与数据结构——哈希算法

哈希算法 前面介绍了哈希表的工作原理和哈希冲突的处理方法。然而无论是开放寻址还是链式地址,它们只能保证可以在发生冲突时正常工作,而无法减少哈希冲突的发生。 如果哈希冲突过于频繁,哈希表的性能则会急剧劣化。如下图所示,对于链式哈希表,理想情况下键值对均匀分布在…

Proxyless的多活流量和微服务治理

1. 引言 1.1 项目的背景及意义 在当今的微服务架构中,应用程序通常被拆分成多个独立的服务,这些服务通过网络进行通信。这种架构的优势在于可以提高系统的可扩展性和灵活性,但也带来了新的挑战,比如:服务间通信的复杂性:不同服务之间需要进行可靠的通信,处理失败重试、负…