C# Bentley-Ottmann算法中线段类的可比较实现

C# Bentley-Ottmann算法中线段类的可比较实现,c#,intersection,segment,C#,Intersection,Segment,我正在尝试实现C#中描述的Bentley-Ottmann算法。 特别是,我在扫描线状态结构中实现Segment类的IComparable时遇到了一个问题。分段类别如下所示: public class SweepLineSegment : IComparable<SweepLineSegment> { public int Edge { get; set; } public PointF LeftmostVertexPoint { get; set; } pub

我正在尝试实现C#中描述的Bentley-Ottmann算法。 特别是,我在扫描线状态结构中实现Segment类的IComparable时遇到了一个问题。分段类别如下所示:

public class SweepLineSegment : IComparable<SweepLineSegment>
{
    public int Edge { get; set; }
    public PointF LeftmostVertexPoint { get; set; }
    public PointF RightmostVertexPoint { get; set; } 
    public SweepLineSegment Above { get; set; }
    public SweepLineSegment Below { get; set;} 

    public int CompareTo(SweepLineSegment other)
    {
        ?????
    }
}
公共类扫掠线段:i可比较
{
公共整数边{get;set;}
公共点f LeftmostVertexPoint{get;set;}
公共点F RightmostVertexPoint{get;set;}
{get;set;}上方的公共扫描线段
在{get;set;}下面的公共扫描线段
公共整数比较(扫掠线段其他)
{
?????
}
}

我不清楚在将两条线段添加到“扫描线状态”结构中时,应如何比较这两条线段?

为什么要首先比较线段?四个坐标的元组没有任何总排序

如果您想知道边沿多边形周长的显示顺序,只需跟踪线段索引即可。我猜这就是
边缘
属性?尝试
返回Edge.CompareTo(其他.Edge)


但我建议根本不要实现
IComparable
。您需要它做什么?

是否可以将您的问题与Bentley-Ottmann算法分离?根据Bentley-Ottmann算法,穿过扫描线的线段保留在通常为平衡二叉搜索树(AVL树、RB树等)的结构中。我尝试为段类实现简单的泛型BST,但为了正确实现它,我需要知道段类比较的正确方法。这种方法与算法密切相关,我并不清楚。所以你的问题很简单,“我如何比较两个自定义对象(在本例中是段)?”