我需要一种非常快速的算法来访问光盘中的磁贴。 最后我不需要完美的光盘,但我需要一个非常快的算法。
我知道我可以使用边界正方形,并遍历该正方形中的所有图块,然后计算x²+y²<R²
以确定图块是否在光盘中。我的情况是,这将是非常缓慢的,因为我必须每秒测试数千个圆圈,这意味着数百万个磁贴,并且在数百万个磁贴上测试x²+y²<R²
的速度很慢。
我需要一些快速,即使它不是很准确(=即使它不是一张完美的光盘,也会变形)
如果足够快,即使是八角形(填充)也没问题。
答案 0 :(得分:3)
x² + y² < R²
→x² < R² − y²
所以x ∈ ( −√(R²−y²); +√(R²−y²))
我认为它足以快速计算每一行的范围。如果没有,请使用Bresenham的算法使其更快。
答案 1 :(得分:0)
不是迭代所有的瓷砖并测试它们是否位于圆形区域中,为什么不直接进入实际位于圆形中的瓷砖并根据需要添加标记和处理... < / p>
使用八边形可能会便宜得多,但随后你会遇到必须计算八边形宽度和适当角度的问题,因为标题/区域的宽度会发生变化。 x^2 + y^2
的优点是一致性。
最后,我建议查看极坐标。 x = rcos(theta)
和y = r*sin(theta)
。如果将cos(theta)
和sin(theta)
的所有值放入数组中,程序将跳过必要的触发计算并跳转到直接测试数据。快速谷歌搜索将提供所有必要的极坐标关系。