我有一个NSMutableArray,最初将5个值设置为零。它包含屏幕上元素的x坐标,每1/60秒更新一次。每个项目的位置都在不断变化。屏幕上最多有5个项目,任何时候最少1个。
阵列中的每个项目都在0 - 480(iphone屏幕的高度)范围内。给定时间的示例数组是:
{123,450,0,0,0}
然后可能会改为:
{150,320,90,0,0}
我需要快速方法来查找不在数组中任何位置附近的位置。这可以是不在每个值周围的设定范围内的位置(例如,值不在数组中任何项目的50之内)或者在其两侧距离最远的位置。
显然,如果无法找到某个范围内的位置,则应选择最佳解决方案。
当一个新项目被添加到屏幕时需要很快,所以选择一个新位置的任何延迟都会减慢游戏动态 - 所以一个while循环是不可取的。
希望在objective-c中有一个简单的数学方法可以对此进行排序。我真的很困惑,我应该如何实现这一目标。任何帮助很多赞赏。
答案 0 :(得分:1)
让我稍微改一下这个问题。你有点p1,p2,p3,p4,p5
,
0 <= p_i <= 480
您希望找到一个x
点
0 <= x <= 480
最大化功能
min_{x} ( |p1-x| + |p2-x| + |p3-x| + |p4-x| + |p5-x| )
如果这是你的目标(并且我不清楚它是或应该是),那么你可以通过检查以下哪个潜在x
值最大化距离来解决这个问题:
0 , p1/2 , p1 + (p2-p1)/2 , p2 + (p3-p2)/2 , ... , p5 + (480-p5)/2
这假定为0 <= p1 <= p2 <= p3 <= p4 <= p5 <= 480
。无论哪个差异条款较大,都应该选择答案。
例如,
{123,450,0,0,0}
答案是123 + (450-123)/2
。
对于
{150,320,90,0,0}
答案是150 + (320-150)/2
要在Objective-C中对此进行编码,您需要有一个函数来返回数组最大条目的索引。将输入作为p1,p2,...,p5
。将这些排序为递增顺序,在左侧添加0
,在右侧添加480
。然后制作一个长度小于1的新数组,以产生连续的差异,例如: {p1-p0, p2-p1, ..., p6-p5}
其中p0 = 0
和p6 = 480
。最后,获取此新数组的最大值索引,将其命名为i
,并返回最佳位置p_i + (p(i+1)-p_i)/2
。
示例:
输入:{150,320,90,0,0}
重新排列为{0 , 0 , 0 , 90 , 150 , 320 , 480}
差异数组{0 , 0 , 90 , 60 , 170 , 160}
索引4
答案是150 + (320-150)/2
答案 1 :(得分:0)
我认为没有一个Objective-C对象会为你做这件事 - 你实际上将不得不做一些编程。
想到的第一个想法是某种树,但是一棵简单的B树或者你有什么不是它。也许是一棵笛卡尔树,但究竟如何应用它现在还没有找到我。
或者你可以强制它 - 按顺序放置值并扫描列表以找到最大的差距。