【发布时间】:2017-03-29 05:45:50
【问题描述】:
我有一个包含折线 (PointCollection) 的列表,如图所示。一些片段像“原始”中所示的蓝色和橙色线一样重叠。我已经知道这些是哪些部分。我需要将重叠的部分分开。棘手的是要避免新的与其他行重叠,如“错误”中所示。
我的问题是,我只有节点的坐标,没有关于段的信息。是否有可能确定我是否在另一条线的一段上移动节点?有人知道我该如何解决这个问题吗?
【问题讨论】:
-
您的目标是什么:Winforms、WPF、ASP..? 总是正确标记您的问题! - 你想怎么换班?手动还是代码?哪个方向?随机?您可以编写一个试错例程,该例程使用相同的测试来检查重叠,因为您必须首先找到重叠。 (提示您可以将折线制作成图形路径,并将它们组合成可以测试是否为空的区域)
-
我为第三方工具准备数据,我不会在我的应用程序中将其可视化。目标是通过代码移动节点。我的想法是将节点在两个线段之间的角平分线方向上向左或向右移动。在我移动节点之前,我想测试哪个方向是空的。如何将折线转换为图形路径?
-
您可以使用 GDI+ 图形并且仍然只导出结果而不实际显示任何内容,尽管对于测试例程,一个小型 winforms 项目可能是个好主意...您只需将点数组添加到空图形路径:
gp.AddLines(pointlist.ToArray())。要移动 GP,请使用 Matrix 和 gp.transform!从一个 gp 创建一个区域并使用 reg.Intersect(gp2) 和 if (reg.IsEmtpy(graphics object)) 进行测试.. -
请注意,此解决方案将取决于您创建的 Graphics 对象的像素分辨率。所以也许需要一个分析解决方案;为此,您将在几何上测试线段相交。周围的线交叉点有不少帖子..
标签: c# winforms 2d gdi+ polyline