在 devexpress 图表中找到两个系列的重叠点
Posted
技术标签:
【中文标题】在 devexpress 图表中找到两个系列的重叠点【英文标题】:find the overlapping points of two series in devexpress chart 【发布时间】: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 函数,也许这个链接可以帮助你***.com/questions/4213117/… 【参考方案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) 方式优化算法(使用“合并”逻辑)
【讨论】:
以上是关于在 devexpress 图表中找到两个系列的重叠点的主要内容,如果未能解决你的问题,请参考以下文章