找到2个部分之间重叠的算法

时间:2012-04-06 06:20:50

标签: java

我有2个部分,每个部分包含2个点,每个点有X和Y. 找到这两个部分之间重叠的最佳方法是什么? (仅限于此处的X相关)

public class section
{
   double leftPoint;
   double rightPoint;
}

2 个答案:

答案 0 :(得分:3)

矩形类不具有此方法吗? 如果您创建两个矩形(大小和位置就像那些“部分”),您可以使用intersection()比较它们将返回重叠区域的矩形。

答案 1 :(得分:0)

以下示例代码向您展示如何执行此操作。我假设这两个部分是(a_from,a_to)和(b_from,b_to)并将结果部分设置为(res_from,res_to)。此外,我只在x轴上的间隔相交,因为这似乎是你想要的。我们的想法是,结果从两个开始的后期开始,到两个结束的早期结束。

Point a_from, a_to;
Point b_from, b_to;
Point res_from =  new Point();
Point res_to =  new Point();
res_from.SetX(Math.max(a_from.getX(), b_from.getX()));
res_to.SetX(Math.min(a_to.getX(), b_to.getX()));

请注意,如果res_to.x< res_from.x根本没有交叉点。

此外,我假设a_from.x< = a_to.x和b_from.x< = b_to.x,这可能并非总是如此。如果不是,您必须将res_from.x计算为Math.max(Math.min(a_from.getX(), a_to.getX()), Math.min(b_from.getX(), b_to.getX()))