找到两个部分之间重叠的最佳方法是什么?

时间:2012-04-11 15:12:26

标签: c#

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

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

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

我想找到两个部分之间的重叠(有):

public double overlap (Segment other)
{

}

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

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

2 个答案:

答案 0 :(得分:1)

两个点可以定义一个矩形。

您在寻找Rectangle.Intersect方法吗?

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

答案 1 :(得分:1)

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

enter image description here

也就是说,您想要在上图中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;

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