我正在开发一个模拟程序.有成群的动物(角马),在那群中,我需要找到一只远离牛群的动物.
在下图中,绿点远离牛群.我希望能够快速找到这些要点.
当然,有一个简单的算法来解决这个问题.计算每个点附近的点数,然后如果该邻域是空的(其中0点),那么我们知道这一点远离牛群.
问题是这个算法根本没有效率.我有一百万点,并且在每百万点上应用这个算法非常慢.
有什么东西会更快吗?也许用树木?
编辑@amit:我们想避免这种情况.A组在左上角绿点会被选择,即使他们应该不是,因为它不是一个单一的动物是从牛群离开,这是一组动物.我们只是寻找远离牛群的一只动物(不是一群人).
我正在开发一个瓷砖映射游戏.
我需要访问光盘中具有给定半径并以给定点为中心的图块.
访问正方形的瓷砖很容易,我们只需要使用两个循环:
for(int i=xmin; i<xmax; ++i)
for(int j=ymin; j<ymax; ++j)
// the tile map[i][j] is in the square
Run Code Online (Sandbox Code Playgroud)
但是如何访问给定光盘中的图块(整圆)?
编辑:
我的意思是,我可以处理边界矩形(边界盘)中的每个图块,并通过使用确定该矩形中的图块是否在磁盘中(x-x0)²+(y-y0)²<R²
,但是使用该算法,我们将探索无用的图块.
当使用大半径时,有许多要处理的区块,并且它会很慢,因为计算(x-x0)²+(y-y0)²<R²
很多次很重
我想要的算法比这个更有效.
编辑2:
我不需要一个完美的磁盘
我想创建一个VBA函数,myFunction(),
它在单元格中写入内容,当计算完成时,它将清除它写入的所有数据.(我想从一个单元格中调用它=myFunction()
)为了清除内容,我将这行放在最后,在完成之前进行清理:
ActiveSheet.Range("$A$1:$B$9").ClearContents
Run Code Online (Sandbox Code Playgroud)
问题是它没有清除任何东西.但是,我注意到如果我将该行放在子程序中,然后将该子程序分配给一个按钮,则单击该按钮时将清除该内容.
当我从程序"Microsoft Visual Basic"的窗口运行代码(使用播放按钮)时,代码完美运行(内容被清除)但是当我从单元格调用该函数时,清洁部分不起作用了.这是代码:
Function myFunction()
ActiveSheet.Range("$A$1:$B$9").Clear
End Function
Run Code Online (Sandbox Code Playgroud)
当我单击一个单元格并键入时=myFunction()
,$ A $ 1:$ B $ 9范围内的内容不会被清除.但是,如果我创建一个子程序(而不是一个函数),并用一个按钮调用它,则清除内容.
当myFunction()调用时,为什么它不起作用?我怎么解决这个问题?