提取剪影坐标

时间:2015-07-16 03:40:05

标签: java coordinates rectangles

Image

从我在那里张贴的图片中,我将图C中那些矩形的所有坐标保存在类图的数组中。

图:

public abstract class Figure {

    private int left, right, height;
    protected Coordinates[] coords;

    public Figure() {

    }

    public Figure(int left, int right, int height, Coordinates[] coords) {

        this.left = left;
        this.right = right;
        this.height = height;
        this.coords = coords;
    }

    public int getRight() {
        return right;
    }

    public int getLeft() {
        return left;
    }

    public int getHeight() {
        return height;
    }

    public Coordinates[] getCoords() {
        return coords;
    }

    public abstract void setCoordinates();

    public abstract void showCoordinates();
}

<强烈>座标:

public class Coordinates {

    private float x, y;

    public Coordinates() {

    }

    public Coordinates(float x, float y) {
        this.x = x;
        this.y = y;
    }

    public float getX() {
        return x;
    }

    public float getY() {
        return y;
    }
}

事实是,我必须使用已经提到的数组中的坐标,从图D(see the image)中的方式找到整个图形的轮廓坐标。

示例(参见图像参考):

 1st Rectangle Coordinates are: (1,0)(1,11)(5,11)(5,0)
 2nd Rectangle Coordinates are: (2,0)(2,6)(7,6)(7,0)
 3rd Rectangle Coordinates are: (3,0)(3,13)(9,13)(9,0)
 4th Rectangle Coordinates are: (12,0)(12,7)(16,7)(7,0)
 5th Rectangle Coordinates are: (14,0)(14,3)(25,3)(25,0)
 6th Rectangle Coordinates are: (19,0)(19,18)(22,18)(22,0)
 7th Rectangle Coordinates are: (23,0)(23,13)(29,13)(29,0)
 8th Rectangle Coordinates are: (24,0)(24,4)(28,4)(28,0)


 The Coordinates of the Silhouettes from all those rectangles should be:
 (1,11)(3,13)(9,0)(12,7)(16,3)(19,18)(22,3)(23,13)(29,0)
 This is where I'm stuck thinking how I'll get these coordinates.

我不是要求某人为我或类似的事情做这件事,我只是想从哪里开始思考,因为我到目前为止所有尝试都失败了,所以任何提示或想法都会出现便利!非常感谢你!晚安。

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试获取每个重叠矩形簇的并集。 Java的java.awt.geom.Rectangle类有一个createUnion(Rectangle2D)方法,可以吸收&#39;}第二个矩形到第一个(通过&#39; union&#39;)。但是,这并不能解决您的群集问题。

如果你想要处理的矩形数量相对较少,只需要在一个维度(即水平)进行聚类,那么最直接的方法就是保留一个没有的矩形列表。已经聚集,循环遍历每个非聚集矩形,将第一个矩形删除到它自己的新聚类“#”中。然后执行与所有其他非聚集矩形的交叉,以确定该对是否应该聚类。 java.awt.geom.Rectangle2D.intersects(Rectangle)方法非常适合这种情况。如果它们相交,那么应该从非聚集矩形列表中删除相交的矩形并将其添加到当前聚类。

Rectangle2D类与您的坐标存储不匹配,但映射将相当直接。

一旦拥有了一组聚类矩形,您仍然需要找到限定给定聚类中所有矩形的每个Polygon的路径。如果您的样本图片指示所有矩形,那么它们的底边都在相同的高度上。并且没有一个矩形有不同的旋转,这将更容易。