最大化给定矩形中的点 - (int spacing,int偏差)

时间:2015-05-28 03:51:22

标签: optimization recursion dynamic-programming pseudocode

我需要一个返回点数组的函数,它必须最大化矩形中的点数。该函数必须支持100mm间距(在任何方向上),但它可以偏离x(整数)以创建几乎适合的点。我们也希望尽量减少偏差。

在给定区域中存在点不能落入的形状。我有一个工作函数boolean isCollide(Point point)。

这实际上是一个CAD问题,逻辑将应用于Catia v5。我希望sudo代码。矩形大小是常量,其大小为PLATEXMAX和PLATEYMAX。

我的解决方案必须详尽无遗,我的所有尝试都只提供了启发式解决方案。算法效率不是问题。有人遇到类似的问题,或有任何建议吗?

我创建了一个插图,以显示我的问题的直观表示。 http://tinypic.com/r/vebtj5/8

编辑:

Point [] tempArray = new Point []

表示i = 0到PLATEXMX {

 for j=0 to PLATEYMAX{

     Point test = new Point(i,j)
     Boolean found = false

     foreach tpoint in tempArray{
     if !found{
       for n=0 to deviation{
         if tpoint.distanceTo(test) < (100 + n){
               if !(isCollide(test){
                   tempArray.add(test)
                   break
                } else{
                     //check points offset from this point
                     //check every offset point 360deg around test
                     //increase checking radius to max deviation

              }
           }
         }
   }

1 个答案:

答案 0 :(得分:0)

如果只有几点,那么“尝试每一种解决方案”都是可行的。因此,如果您有8个点,请尝试包含/不包括的点的所有2 ^ 8个排列,检查该组点是否适合给定矩形。这将是最容易实现的:使用带有0 ... 2 ^ n的某个整数i的for循环,并使用位掩码在测试中包含/不包含某些元素。

作为一种略显蛮力的方法,尝试回溯。基本上,你尝试点的所有排列,但只要解决方案无效就停止(即,如果点集不适合给定的矩形。Wiki提供伪码的实现。