【问题标题】:find the overlapping points of two series in devexpress chart在 devexpress 图表中找到两个系列的重叠点
【发布时间】:2017-08-05 03:29:46
【问题描述】:

如您所见,我有一个包含两个系列的 winform 图表(DevExpress Chart)。
每个系列都有自己的观点。
而我想要的是找到这两个系列的重叠点(图中绿色圆圈所指)。

例如(第一个重叠点为 3.4,第二个重叠点为 7.3)。
谢谢。

【问题讨论】:

  • 你能分享你系列中所有点的值并创建Minimal, Complete, and Verifiable example吗?
  • 对于红色系列 { (4,A) (2,B) (10,C) (8,D) (6,E) (1,F)} 对于系列蓝色 { (0.5,A) (9.8,B) (5.5,C) (5.3,D) (2.5,E) (4.5,F)} .
  • 但如果您愿意,您可以将参数 (A,B,C,D,E,F) 视为数值 (1,2,3,4,5,6)。例如对于红色系列 { (4,1) (2,2) (10,3) (8,4) (6,5) (1,6)} 对于蓝色系列 { (0.5, 1) (9.8,2) (5.5,4) (5.3,4) (2.5,5) (4.5,6)}
  • @zey 您的积分值是随机创建的还是根据某种数学函数创建的?
  • @zey 因为 c++ 实现需要 CGAL 函数,也许这个链接可以帮助你stackoverflow.com/questions/4213117/…

标签: c# winforms charts devexpress


【解决方案1】:

如果您可以直接访问 Series 集合,您可以:

var intersection = Series[0].Points.Intersect(Series[1].Points);

如果您在此过程中创建离散的 Point 对象,您可能还必须定义匹配行为。

【讨论】:

  • 返回空值!
  • 我认为 OP 要求几何交集。
  • 正是@nempoBu4,我搜索了几何交集,但我无法理解,也找不到完美的解决方案。
【解决方案2】:

据我了解,您的每个系列都只是连续点的集合。您只需要从每个集合中找到线段之间的交点。我建议为此目的使用 Bentley-Ottmann 算法,它允许以 (N log N) 方式找到答案(N 是两个系列的线段数)。不幸的是我不知道c#中是否有实现(任何时候你都可以使用c++实现,如果你找不到c#解决方案)

如果你总是有两个系列,由一些两个不同的函数定义,你可以以 O (N) 方式优化算法(使用“合并”逻辑)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2014-12-04
    • 1970-01-01
    相关资源
    最近更新 更多