【发布时间】:2016-07-20 15:52:16
【问题描述】:
我有一个相当简单的对象,其形状由 12 个顶点定义。在对这个对象进行隐藏线计算时(我正在使用 Cad Control 来执行此操作),它返回组成形状的线条集合,通常远远超过绘制这种形状的最小线条数,请参见附图:
点之间的每一段都是一条线。我想删除以红色标记的点,只留下绘制形状所需的最小计数(黄色十字)。
一种方法是将它们顺时针排序,然后循环遍历它们,检查列表中三个相邻点的叉积是否为零,然后删除中间的点。不幸的是,无法预测点将如何排序,因此这不是一个选项。
第二种方法是循环遍历 cad 控件提供的线集合,并找到同一线上的所有点,对它们进行排序(pointsLineA、pointsLineB、pointsLineC 等)从那里开始会容易得多。
到目前为止,我已经完成了循环遍历行集合(获取每个行的点)并在嵌套循环中循环遍历同一个集合(它的副本)以检查集合中任何随机行的点是否位于与第一个循环的线中的点相同的线。这涉及两个循环并在运行时修改集合。简而言之,这是一个混乱。如果您想查看代码示例,请告诉我。 为了确保一切都清楚 - 我的第一个目标是将点分组,以便在每个组中出现仅属于一条线的点。有什么建议?
【问题讨论】:
-
你能展示你必须使用的 CAD 数据吗? (对于上述形状)
-
无法找到对齐的点。在您的示例中,最左边的四个黄色十字对齐但不属于单行。
-
在图片上,我们可以看到无关的顶点,但我们看不到线段是什么。它们可能重叠。
-
@YvesDaoust 是的,当然,我没有意识到这些点也是对齐的!是的,我发现有时线段也是重叠的。我想这会带来新的问题。现在我完全迷失了。
-
@erotavlas 唯一可用的数据是 segment2D 的集合,其中包含每个 segment2D 的 startPoint、endPoint、midPoint、长度和法线。这就是我所拥有的。
标签: c# sorting computational-geometry