如何将存储在ArrayList中的复杂形状与Geomerative Library合并

时间:2015-11-02 17:47:10

标签: arraylist merge processing shapes

我存储了这个类的形状:

class Berg{
  int vecPoint;
  float[] shapeX;
  float[] shapeY;

  Berg(float[] shapeX, float[] shapeY, int vecPoint){
    this.shapeX = shapeX;
    this.shapeY = shapeY;
    this.vecPoint = vecPoint;
  }

  void display(){
    beginShape();
      curveVertex(shapeX[vecPoint-1], shapeY[vecPoint-1]);
      for(int i=0;i<vecPoint;i++){
        curveVertex(shapeX[i], shapeY[i]);
      }
      curveVertex(shapeX[0],shapeY[0]);
      curveVertex(shapeX[1],shapeY[1]);
    endShape();
  }
}
带有

的ArrayList中的

shapeList.add(new Berg(xBig,yBig,points));

形状由八个(curveVertex-)点(xBig和yBig)定义,形成围绕随机定位中心的形状。 在检查形状是否相交之后,我想合并彼此重叠的形状。我已经检测到交叉点工作但很难管理合并。

我读到Geomerative库有一种方法可以用union()做类似的事情,但需要RShapes作为参数。 所以我的问题是:如何将形状更改为所需的RShape类型?或者更一般(也许我做了一些整体错误):如何使用或不使用Geomerative Library合并存储在ArrayList中的复杂形状?

1 个答案:

答案 0 :(得分:1)

查看RShape的API:http://www.ricardmarxer.com/geomerative/documentation/geomerative/RShape.html

列出了可用于从一系列点中创建RShape的构造函数和方法。它可能看起来像这样:

class Berg{
  public RShape toRShape(){
    RShape rShape = new rShape();
    for(int i = 0; i < shapeX; i++){
      rShape.addLineto(shapeX[i], shapeY[i]);
    }
  }
}