【问题标题】:IComparable implemention for Segment class in Bentley-Ottmann algorithmBentley-Ottmann 算法中 Segment 类的 IComparable 实现
【发布时间】:2012-10-25 13:47:12
【问题描述】:

我正在尝试实现在 C# 中描述 here 的 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)
    {
        ?????
    }
}

我不清楚在将两个段添加到扫描线状态结构时应该如何比较它们?

【问题讨论】:

  • 是否可以将您的问题与 Bentley-Ottmann 算法分离?这样做会让更多的观众受益。
  • 根据 Bentley-Ottmann 算法,跨越扫描线的线段保存在通常是平衡二叉搜索树(AVL-tree、RB-tree 等)的结构中。我尝试为 Segment 类实现简单的通用 BST,但我需要知道 Segment 类的正确比较方法才能正确实现它。这种方式与算法密切相关,我不清楚。
  • 那么您的问题很简单,“我如何比较两个自定义对象(在这种情况下为段)?”

标签: c# intersection segment


【解决方案1】:

您为什么一开始就尝试比较线段?四个坐标的元组没有任何总排序。

如果您想要边沿多边形周边出现的顺序,您应该只跟踪线段索引。我猜那是Edge 属性?试试return Edge.CompareTo(other.Edge)

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

【讨论】:

    猜你喜欢
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多