Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 有没有办法优化“捕捉到对象”算法?_Algorithm_Optimization - Fatal编程技术网

Algorithm 有没有办法优化“捕捉到对象”算法?

Algorithm 有没有办法优化“捕捉到对象”算法?,algorithm,optimization,Algorithm,Optimization,所以我有n个可以在舞台上拖动的物体,我想让它们锁定,磁铁。。。当你把它们拖得足够近的时候,它们就会互相吸引。这意味着在每次鼠标移动事件中计算从拖动对象到舞台上其他对象的距离。这可以优化吗?类似于仅将距离与闭合对象进行比较,但如何在不首先计算所有距离的情况下知道哪些闭合 谢谢您可以使用。K-d树具有高效的查找最近邻函数。只要确保每个已经“就位”的对象都在树中,当你移动一个元素时,找到它最近的邻居,并检查它是否足够近 一种主要用于网格的替代方法是使用。每当你放置一个物体时,在它的“影响”开始的地方画

所以我有n个可以在舞台上拖动的物体,我想让它们锁定,磁铁。。。当你把它们拖得足够近的时候,它们就会互相吸引。这意味着在每次鼠标移动事件中计算从拖动对象到舞台上其他对象的距离。这可以优化吗?类似于仅将距离与闭合对象进行比较,但如何在不首先计算所有距离的情况下知道哪些闭合

谢谢

您可以使用。K-d树具有高效的查找最近邻函数。只要确保每个已经“就位”的对象都在树中,当你移动一个元素时,找到它最近的邻居,并检查它是否足够近

一种主要用于网格的替代方法是使用。每当你放置一个物体时,在它的“影响”开始的地方画一条线。用观察者连接此行中的每个“单元格”,当您将对象移动到单元格时,如果有任何观察者连接到该单元格,请调用它们。

您可以使用。K-d树具有高效的查找最近邻函数。只要确保每个已经“就位”的对象都在树中,当你移动一个元素时,找到它最近的邻居,并检查它是否足够近


一种主要用于网格的替代方法是使用。每当你放置一个物体时,在它的“影响”开始的地方画一条线。用观察者将这一行上的每个“单元”连接起来,当你将一个对象移动到一个单元时,如果它有任何观察者连接到它,就调用它们。

这类问题的经典解决方案是将空间递归地切割成区域。你只能在附近搜索邻居。这方面的一个经典数据结构是将正方形切割成四个正方形

这类问题的经典解法是将空间递归地切割成若干区域。你只能在附近搜索邻居。这方面的一个经典数据结构是将正方形切割成四个正方形

两个想法:

你可以把舞台分成一些大小的“瓷砖”,比如64x64像素?。如果您知道哪些磁贴将部分或完全重叠在给定的磁贴上,则可以将命中检测限制在这些磁贴上

你可以保持一个有序的状态!将给定的“y”坐标映射到该“y”位置上的所有对象的贴图。y坐标处的每个对象列表也会进行排序,从而按X顺序对对象进行排序。通过使用对排序序列进行有效计算的上下限,可以快速获得某个边界矩形内所有对象的句柄

两个想法:

你可以把舞台分成一些大小的“瓷砖”,比如64x64像素?。如果您知道哪些磁贴将部分或完全重叠在给定的磁贴上,则可以将命中检测限制在这些磁贴上

你可以保持一个有序的状态!将给定的“y”坐标映射到该“y”位置上的所有对象的贴图。y坐标处的每个对象列表也会进行排序,从而按X顺序对对象进行排序。通过使用对排序序列进行有效计算的上下限,可以快速获得某个边界矩形内所有对象的句柄