在没有其他形状的地方创建形状

Creating Shapes Where No Others Exist

我正在尝试使用 CreateJS 想出一种在其他形状不存在的地方创建形状的方法。在这种情况下,我不太确定从哪里开始或什至要搜索什么。基本上,我的目标是让圆圈出现在舞台上,但仅限于其他人没有的地方。

我的问题是,解决这个问题的好方法是什么?是否有任何文档或类似文件可以帮助我实现创建代码来执行此操作?

Link to JSFiddle

var stage = new createjs.Stage("canvas"),
    canvas = stage.canvas;

function createCircle(){
    var circle = new createjs.Shape().set({name:"circle"});    
    circle.graphics
        .beginFill("DeepSkyBlue")
      .drawCircle(0, 0, 25);
    circle.x = Math.random() * canvas.width;
        circle.y = Math.random() * canvas.height;    
    stage.addChild(circle);
}

setInterval(function(){ 
    createCircle();
  stage.update();
  }, 1000);

这是一个非常简单的演示,可以填充圆圈,确保它们不会接触。

  1. 生成随机圆圈大小
  2. 随机选择一个x/y
  3. 检查与其他圈子的距离
  4. 如果没有接触,就在那一点画圆。如果确实触及,请重试

http://jsfiddle.net/lannymcnie/2o7do8kf/1/

// Basic distance checking
var circle = circles[i], 
  dX = circle.x - x, 
  dY = circle.y - y,    
  dist = Math.sqrt(dX*dX + dY*dY);
if (dist <= size + circle.size) {
  ok = false; 
  break;
}

此演示将尝试 100 次(最多)来定位每个圆圈。如果它运行超过 100,它将完全放弃。您可以将其增加到 10,000,它基本上会得到相同的结果。

这显然不是执行此操作的最有效或最复杂的方法,但它可能会得到足够接近您正在寻找的东西而不会疯狂。