用矩形Java覆盖多边形

时间:2013-12-16 09:03:20

标签: java java-2d

我需要用矩形覆盖一些多边形,例如:enter image description here

黑色方块中的黑色图形是我需要用这些绿色矩形覆盖的多边形,但我需要更有效地做到这一点,就像我做的那样做网。因为你可以看到,如果我移动它们可以放置更多的绿色矩形。

里面的矩形是固定的大小(不像它自己的多边形那么大),一个像图片中的所有,它们可以是垂直和水平放置,我想填充多边形尽可能多的内部它,这个多边形只是例如,可以有不同的多边形,其中有孔,例如黑色小方块是一个洞。

module = rectangle

private void coverWithModules(Graphics g, int[] xpoints, int[] ypoints) {
    Polygon module;
    int x1, x2, x3, x4, y1, y2, y3, y4;
    int moduleRowNumber = 0;
    int totalRows = (getMax(ypoints) / moduleHeight);
    while (moduleRowNumber < totalRows) {
        // first module
        x1 = getMin(xpoints);
        y1 = getMin(ypoints) + distance * moduleRowNumber + moduleHeight
                * moduleRowNumber;
        x2 = x1 + moduleWidth;
        y2 = y1;
        x3 = x1 + moduleWidth;
        y3 = y1 + moduleHeight;
        x4 = x1;
        y4 = y1 + moduleHeight;

        int[] x = { x1, x2, x3, x4 };
        int[] y = { y1, y2, y3, y4 };
        module = new Polygon();
        // check if point are inside the polygon
        checkModulePlacement(g, x, y, module);
        // placing modules in a row
        while (x1 < getMax(xpoints)) {
            x1 = x2 + distance;
            y1 = getMin(ypoints) + distance * moduleRowNumber
                    + moduleHeight * moduleRowNumber;
            x2 = x1 + moduleWidth;
            y2 = y1;
            x3 = x1 + moduleWidth;
            y3 = y1 + moduleHeight;
            x4 = x1;
            y4 = y1 + moduleHeight;
            int[] xx = { x1, x2, x3, x4 };
            int[] yy = { y1, y2, y3, y4 };
            module = new Polygon();
            checkModulePlacement(g, xx, yy, module);
        }
        moduleRowNumber++;
    }
}


private void checkModulePlacement(Graphics g, int[] x, int[] y, Polygon module) {
    boolean pointInside = true;
    boolean pointOnObstraction = true;
    for (int i = 0; i < x.length; i++) {
        if (pointInside) {
            pointInside = roof.contains(x[i], y[i]);
        }
        module.addPoint(x[i], y[i]);
    }
    pointOnObstraction = checkForObstractions(module);
    g.setColor(Color.GREEN);
    if (pointInside == true && pointOnObstraction == false ) {
        g.drawPolygon(module);
    }
}

我正在找东西而且我找到了Something like this也许有更多这样的东西?

我不知道在哪里搜索此类信息。我应该怎么看才能得到我需要的东西?也许这种东西有某种类型的库?

0 个答案:

没有答案