我正在寻找一种创建均匀间隔网格的通用算法,我很惊讶它找到了多么困难! 这是一个很好解决的问题,我的名字我不知道吗? 或者这是一个未解决的问题,最好通过自组织地图来完成?
更具体地说,我试图在2D笛卡尔平面上制作网格,其中每个点与4条边界线之间的欧几里德距离(或者#34;墙壁和#34;以形成边界框)是等于或几乎相等。 对于一个平方数,这就像制作一个带有sqrt(n)行和sqrt(n)列的网格一样简单,其中等间距位于边界框的中心。对于5个点,模式可能是圆形或4个点,中间有一个点。
答案 0 :(得分:1)
这个问题没有简单的通用解决方案。自组织地图可能是最佳选择之一。
解决这个问题的另一种方法是将这些点想象为彼此排斥并且也被墙排斥的粒子。作为初始安排,您可以将点均匀分布到下一个较小的方形数字 - 为此您已经有了解决方案。然后随机添加剩下的点。
根据粒子和墙壁之间的总力,迭代地修改位置以最小化能量函数。结果当然取决于力法,即力如何取决于距离。
要解决此问题,您可以使用FEM等数值方法。
基于相同原理的简化且效率较低的方法是首先根据您可以计算的平方数情况设置估计的最小距离。然后多次迭代所有点,并为每个点计算到其最近邻居的距离。如果这小于估计的距离,则将您的点移动到相反方向上的一小部分差异。
此方法通常不会导致稳定的最小值,但应在迭代次数后找到可接受的解决方案。您将不得不尝试步长和迭代次数。
总而言之,您有三种选择:
FEM方法:高效但难以实施
自组织地图:实施效率稍差,中等复杂度。
上一节中描述的迭代:效率较低但易于实现。
答案 1 :(得分:0)
不幸的是,您的问题仍未明确指出。你说你想要点“等距”但在你的例子中,一些点相距很远(例如左上角和右下角),这些点距离墙壁的距离都不同。
也许您希望这些点具有相等的最小距离?在这种情况下,一个简单的解决方案是绘制十字形状,其中一个点位于中心,其余部分形成垂直和水平交叉线。墙和点之间的间隙以及线上的点都可以相等,这可以适用于任意数量的点。