检查2d中的矩形边是否相互重叠

我正在绘制一个矩形。 触摸角落,我可以调整这个矩形。 现在这个问题就是在resize的时候,对面的两边重叠,相互交叉。 我不得不阻止这种重叠和交叉。 最小的宽度和高度应该是任何固定的常数(比方说10)。

在下面的代码left, topcornerId 0left, bottomcornerId 1等等。 还left, topright, bottom使groupId 1和其他两边做groupId 2 。 这里cornerList包含关于所有4个坐标的信息。

任何帮助或引用非常感谢。 谢谢。

可resize的矩形的参考是如何创建一个Android上的用户触摸事件的可resize的矩形?

 private void moveCorners(float x, float y) { cornerList.get(cornerId).setX(x); cornerList.get(cornerId).setY(y); paint.setColor(Color.CYAN); if (groupId == 1) { cornerList.get(1).setX(cornerList.get(0).getX()); cornerList.get(1).setY(cornerList.get(2).getY()); cornerList.get(3).setX(cornerList.get(2).getX()); cornerList.get(3).setY(cornerList.get(0).getY()); } else { cornerList.get(0).setX(cornerList.get(1).getX()); cornerList.get(0).setY(cornerList.get(3).getY()); cornerList.get(2).setX(cornerList.get(3).getX()); cornerList.get(2).setY(cornerList.get(1).getY()); } invalidate(); } 

    你不需要一个角落列表。 你需要的是一个旁边的列表,因为你实际上拖着两边 – 两个相邻的角落总是有相同的x或相同的y ,所以角落拖动是毫无意义的。

    您确实需要每个轴的最小值和最大值,以及最小尺寸:

     float xMin; float xMax; float xMinSize; 

    你需要为宽度写一个getter方法:

     float getXSize() { return xMax - xMin; //this means your rightmost x for the rectangle, minus leftmost } 

    当你拖动(每一帧)时,你必须检查大小是否小于最小值,如果它变小,然后钳住它,即不要让它低于最小值:

     if (getXSize() < xMinSize) { //PSEUDOCODE: //if currently dragged side is the right hand side (x max): xCurrentlyDraggedSide = xOtherSide + minWidth; //else if it's the left hand side (x min): xCurrentlyDraggedSide = xOtherSide - minWidth; } 

    然后在所有相同的地方做类似的y

    得到这个工作,然后建立你的可拖动的角落回到这个顶部,如果你想要他们。