【发布时间】:2014-07-20 08:18:51
【问题描述】:
问题
我正在使用 3D WPF 库中的简单线条显示几何图形。在下一张图片中可以看到它的一个例子:
您可以在其中看到一组三角形和四边形。我绘制这个的方式是我提供了一个List<Point3D>,我在其中放置了代表每个段的点对。
问题是有很多重复的边,我想避免这种情况,因为这种类型的表示似乎非常需要资源。
点列表是在每个包含 N 个顶点的Element 上迭代生成的。它不知道是否共享特定的边缘。
<p0, p1, p1, p2, p2, p333, p333, p89, p89, p2, p2, p1 ...>
这个想法是删除重复的对(注意顺序可能不一样)。在上面的示例中,删除的对应该是最后一个 (p2, p1),因为它表示与第二对点 (p1, p2) 相同的边。可能有一对、两对或更多对重复的点。
我需要尽快执行此操作,性能是这里的首要任务。
想法
在列表中添加点时,我可以暂时存储其中两个并检查列表是否已包含它们,但这意味着每次添加点时都要查看列表,这对我来说似乎不是一个好主意(列表将包含数千个点 5000-50000)。
我生成点列表的元素具有多个具有唯一 ID 的节点,因此我认为可以通过创建有序 Tuple<Point3D, Point3D> 的 Dictionary 然后删除重复项来以某种方式使用它。
我还没有尝试过最后一个想法,因为我还不确定如何实现它,我想知道是否还有其他可以做的事情。
【问题讨论】:
-
你的例子只是给出了一个没有连接的点列表。如果表示为对/元组会很容易。只需要写一个比较器,告诉你是否使用了相同的坐标,也就是说它们是相同的,可以去掉。
-
此列表解释为将每对转换为一个段。我认为比较节点 ID 比查看坐标要快得多。
标签: c# wpf list duplicates