C# Bentley-Ottmann算法中线段类的可比较实现
我正在尝试实现C#中描述的Bentley-Ottmann算法。 特别是,我在扫描线状态结构中实现Segment类的IComparable时遇到了一个问题。分段类别如下所示: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
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,但为了正确实现它,我需要知道段类比较的正确方法。这种方法与算法密切相关,我并不清楚。所以你的问题很简单,“我如何比较两个自定义对象(在本例中是段)?”