0

我有包含 2 个部分的 Segment 类,每个部分包含 2 个点 X 和 Y 坐标。

Point 类有 getX() 和 getX() 方法。

public class Segment
{
    private Point pointLeft;
    private Point pointRight;
}

我想找到两个部分之间的重叠(是否存在):

public double overlap (Segment other)
{

}

我怎样才能找到它(只有 X 轴重叠)

平行于 X 轴的 2 个部分(每个部分具有相同的 Y)

4

2 回答 2

1

两点可以定义一个矩形。

您在寻找 Rectangle.Intersect 方法吗?

http://msdn.microsoft.com/en-us/library/y10fyck0.aspx

于 2012-04-11T15:17:22.397 回答
1

我对您的问题的理解是,您首先要在 X 轴上投影两条线,然后找到它们的交点。

在此处输入图像描述

也就是说,您需要上图中 X 轴上灰色部分的长度。

您需要分 4 个部分执行此操作,如下所示:

if (other.pointLeft.X <= pointLeft.X && other.pointRight.X >= pointRight.X)
    return pointRight.X - pointLeft.X;

if (pointLeft.X <= other.pointLeft.X && pointRight.X >= other.pointRight.X)
    return other.pointRight.X - other.pointLeft.X;

if (pointLeft.X <= other.pointLeft.X && pointRight.X <= other.pointRight.X)
    return pointRight.X - other.pointLeft.X;

if (pointLeft.X >= other.pointLeft.X && pointRight.X >= other.pointRight.X)
    return other.pointRight.X - pointLeft.X;

return 0;

请注意,我已经对此进行了编码,并且没有机会对其进行测试。但它应该让您对需要做什么有一个基本的了解。

于 2012-04-11T15:24:36.250 回答